主题:  这样的高级权限设计如何做

oooni

职务:普通成员
等级:2
金币:1.0
发贴:263
#12004/4/21 19:52:54
我想做这样的权限设计
用户表 tb_user:字段: username password uf_id
权限名称表 tb_flag: 字段: f_id f_name
关于权限设计的复杂问题

说明: uf_id 保存 f_id
f_id 可以是多个
管理可以添加 权限名称
同时也可以赋予某个用户某个权限

不知道我问题说明白了没。举个例子吧:

tb_user:
username:admin
password:admin
uf_id:1,2,5,6

tb_flag
f_id: 1 2 3 4 5 6 7 8
f_name:想 说 看 听 摸 打 罚 杀

那么 admin 就拥有 想 说 摸 打
的权限了

管理员还可以添加权限
如:
f_id: 9
f_name:吃

tb_flag:
f_id: 1 2 3 4 5 6 7 8 9
f_name:想 说 看 听 摸 打 罚 杀 吃


问题:
数据库里如何存?取?
页面里如何做判断?



oooni

职务:普通成员
等级:2
金币:1.0
发贴:263
#22004/4/21 21:34:51
先不说别的
你的站 我很喜欢

有很多实用的东西
权限这个 我再仔细研究一下



缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#32004/4/21 21:56:18
比如某个页面需要"打"的权限
那么就在当前用户的权限一面查找对应的"6"是不是存在



沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
#42004/4/22 9:23:04
01001010010101101
呵呵,用二进制代表权限吧,1表示有,0表示没有,权限由管理员进和分配,管理员可以无限制的添加权限,每次添加一种权限,就把当前所有用户的权限更新一下,另外自己写一个函数,来判断用户是否有权限进入当前页面,不过因为权限的更新,所以这个函数可能也要不断的修改,暂时也同有想到什么好的办法,哪位有好的思路可以提供一下。


难人一个……

oooni

职务:普通成员
等级:2
金币:1.0
发贴:263
#52004/4/22 17:06:11
楼上的办法 我只听人说过 自己太菜了 肯定弄不来的



janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#62004/4/23 9:35:34
不建议将分散的权限代码存储在一个字段中,这样操作起来效率会比较低。

对于数量较少的权限(一般32个以下),可以考虑按位存取,这样,所以权限的集合可以存储为一个整数。通过对特定位进行按位与操作即可判断用户在该位上有没有权限。

如果想以后能方便地扩展,可以再增加一个 UserPermission 表,基本设计如下:
tb_UserPermission:
f_UserName:用户标识
f_Id:权限标识
那么判断一个用户admin有没有“想”权限就可以表达为:
SELECT COUNT(*) FROM tb_UserPermission WHERE f_UserName='admin' AND f_Id=1