求一个合理的设计,关于用户权限。(100分)

  • 主题发起人 主题发起人 angelloi
  • 开始时间 开始时间
A

angelloi

Unregistered / Unconfirmed
GUEST, unregistred user!
有5种不同的用户,a,b,c,d,e
有5个菜单选项,每个用户对应的选项个数都不一样,
进入菜单后,对于每种用户的控制也不一样,例如,a进入menu1 ,可以编辑
b进入menu1却只能查询。
如何用数组设计这个的权限表。请高手赐教.
 
你可以使用数组把用户权限和菜单关联起来,用户登录后,根据数组的值,激活不同菜单。
 
楼上的,能否具体一点,我自己也试过
总是感觉可扩展性太差。
 
参考:http://www.delphibbs.com/delphibbs/dispq.asp?lid=3523208
 
我自己是这样做的,
使用一个数组定义权限,比如有a,b,c,d,e...各用户,
我对功能X提供了可以查看,可以输出,可以修改三种功能。
var qx:array [1..100,1..2] of integer;//我使用用户id.
qx[n,?]=1时可以查看, qx[n,?]=2可以输出,qx[n,?]=3可以修改,
当用户点击菜单X时,我会检查这个用户对应的权限值是什么,然后对其做功能限制
 
使用一个数组的形式:
C[m,n]=k。
m为用户可超做的模块,根据模块的多少设置m的值;n为操作类型,例如读、写、打印等;K为可操作的数据范围,例如本单位的,同级单位的,全部等。
使用时,用户登陆时根据权限分配给其C[m,n]的值,在进入的菜但或按钮判断C[m,n]的值与k比较,相同则进入
 
用权限字符串来做,字符串的每一位的值来说明字符串所对应的用户针对某一项功能的权限。
 
用数据库结构更清晰一点
一个用户表 一个menu(uid, mid, name, pmid, right)
 
把你系统中每一个涉及到权限的操作列出来,给这些个操作赋一个特征字符串,比如操作1“00001”,另外一个操作2为“00010”等,注意,每一个权限的特征字符串都是唯一的一个只有一个位数为1的二进制数模样的字符串,特征字符串长度等于你系统中所有涉及到权限的操作数(也就是上面叫你列出来的操作条数),这样,每一个操作都有其特定的特征字符串。对于每一个用户,他也有一个唯一权限字符串,这个字符串就是把各个操作的特征字符串当成二进制数字后的加法和,比如该用户具有上面操作1和操作2两个权限,那么他的权限字符串为“00011”,依次类推。用户组(相当于权限模板)也可以当成一个特殊的用户对待给其分配权限字符串,一个用户加入这个用户组后只要把他自己原来的权限串个该用户组的权限串相加就可以得到一个新的权限,而且这个新的权限同时继承了该用户原来的权限和新加入的用户组的权限。
 
同意xulxqqqq的观点

建议使用数据库结构进行权限设置,扩展性更强,管理为方便
 
这与菜单没有任何关系!!!!!
根据用户的权限设定程序 button(假定你用Button)的Enable , 或者 memo de ReadOnly(假定你用Memo)

if rsModifyMeno in userinfo.rights then memo1.readonly:=false
if ....
明白吗?
 
你总共不会有32个可屏蔽的功能吧,先做一个DWORD型的数组,每一位(bit)就是一个功能的掩码,然后定义32个掩码常量,一类用户该有那些功能那些功能的相应位(bit)为“1”,既节省内存运算也快(判别权限只做一次逻辑与和一次比较)。
 
后退
顶部