QQ 1640076782

2010年06月20日

PHP基于角色+操作+频道的权限系统设计

Filed under: phper — 标签:, — lijianbin @ 11:21 上午

PHP基于角色+操作+频道的权限系统设计

图示
角色

Role_id 角色名
1 编辑
2 维护

用户

User_id 用户名
1 Lh
2 yl

频道

Channel_id 名称
1 产品
2 订单

操作

Action_id Action_name Channel_id
1 添加产品 1
2 修改产品 1
3 审核订单 2
4 取消订单 2
5 查询订单 2

说明操作的action_id 可用这种设计方案:

用2的n次幂组成权限值的集合,如1、2、4、8、16…,某用户的权限值为其子集中的整数之和,如 7=1+2+4,5=1+4。如果要从数据库检索包含某几种权限的用户,则先把这几种权限值相加,假设和为k,然后select * from table where 1 and 用户权限值 = ‘k’;如果要判断某用户有哪些权限,则取出其权限值k,分别用k&1,K&2,K&4,k&16…,如果为真,则 表示有值等于“&”右边整数的权限,例如,如果k&4为真,则此用户有权限表中值等于4的权限;

角色,用户,频道 关联表

Id User_id Role_id Channel_id
1 1 1 1
2 1 1 2
3 2 2 1

其中 ,频道和操作是固定的,用户,角色可以自行设计和添加,可实现角色不同,频道不同,权限不同。
如查询用户名为lh 有哪些权限,

Select action_id from 操作表 where Channel_id in ( select Channel_id from角色,用户,频道 关联表,角色表,用户表 where 用户表user_id  =角色,用户,频道 关联表.user_id and 角色表.role_id  =  角色,用户,频道 关联表.role_id) 这样可查询出 用户lh 所具有的所有操作 .再按照蓝色字体说明的 提取出 权限 ,进行权限的控制 。也可以把取得的 权限操作 放在$_SESSION容器里进行管理,免费每次操作都要进行数据库的操作。