新客网WWW.XKER.COM:致力做中国最专业的网络学院!
学院: 操作系统 - 网络应用 - 服务器 - 网络安全 - 工具软件 - 办公软件 - Web开发 - 数据库 - 网页设计 - 图形图像 - 媒体动画 - 硬件学堂 - 存储频道 - QQ专区
您的位置:首页 > 软件开发 > .Net开发 > Asp.net教程 > 正文:权限设计问题,即C#实现上的设想[供讨论]

权限设计问题,即C#实现上的设想[供讨论]

新客网 XKER.COM 2004-10-26 来源: 收藏本文
现在的程序,很多涉及到权限这个管理问题。一稍大和政务或商务软件都会涉及许多的权限,如管理、发表、浏览、收发公告等权限。
对这个问题,在数据库上怎样实现才好呢?
我下载了一些软件,它们在数据库上实现是用字段,即每一权限设置为1个Boolean或byte的字段。我分析了这种设计,优点是读取方便,如要知道某一权限,只要得到某个字段就可以了,不需要很多的程序来判断。
但这种设计的缺点是:1、在维护中,需要增加或修改权限,就需要修改数据库;2、如果贪其方便,很可能会在程序很多地方用到判断一个权限的语句。如果权限改变或取消后,会在很多的地方修改代码;3、字段很长,如果有几十种权即的话,会较麻烦。

听取朋友建议后,考虑用一个字段,用01来表示是否拥有该权限,权限按位设置:100100101110110,每位代表一种权限。
考虑以后的升级等需要,应设置一些预留位。比如一家公司需要40种权限,在设计时就用100位的字串来表示,如:
·管理员: 需要12种,设置前20位
·发表文章:需要20种,设置30位
·工作权限:需要20种,设置30位
......
没有用到的权限位全部设为0,这样我们可以来解码了。

不细说这位数怎样记录,这在用户管理中还是比较方便的。我主要想说一下如何读取:

这10011011101......太难读懂了,好象是个机械,一点没人味,我就想给它增加些人味

好在这C#比以前用ASP强太多了,就想到了用枚举、结构,用类的封装。该类的封装核心应该是读取和解码

首先用个enum来列举一下这个权限,也就是给每个位(权限)取个好听的名字:

enum PersonPurview {IsAdmin, ManageMember, ManageArticle, ......,
ManagePreSet1, ManagePreSet2, ......,
ArticleSend, ArticleView, .....,
ArticlePreSet1, ArticlePreSet2, ......};

当然你可以用结构,但我发觉用枚举似乎更方便。比如我们从数据库中已经读取了权限字段,并用strPurview来表示这个权限变量。
这样就可以先写判断权限的函数了:
下面很重要,但很简单:

// 判断拥有某种权限的函数
public bool HasPurview(PersonPurview, purview)
{
if ( srtPurview.SubString(Covert.ToInt32(purview), 1) == "1" )
{
return true;
}
else
{
return false;
}
}

这样就可用这个函数来判断了,比如相判断文章发表权(ArticleSend)

if ( HasPurview(PersonPurview.ArticleSend) )
{
......;
}

怎么样,你看清楚了吧。

最后,我这还是设想,还没付诸行动。我也想把它作为一个问题供各位讨论,我觉得一个程序好的设计比好的代码更重要。



收藏】 【评论】 【推荐】 【投稿】 【打印】 【关闭
发表评论
要记得去论坛讨论,点击注册新会员匿名评论
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
阅读排行
随机推荐
实用信息推荐