目的描述:
系统中包含各个模块,模块下面又分为许多子模块,理论上是无限分级的模块。要实现对各个模块的各种权限操作。
现在有的权限包裹增、删、改、查,下载,发帖,上传权限,权限对应权限表,允许添加新权限。权限表数据结构(权限ID,权限名称,备注)。
每个模块包含权限表中的一种或多种权限,父级模块的权限子集模块不具有继承性,也就是说,对一个子集模块的父级模块具有修改权限,但是子集模块不会继承该权限。
用户的权限继承于用户组,通过调整用户组的权限来控制用户的权限。一个用户只能属于一个用户组,一个用户组可以拥有多个用户。求解 怎么实现这样情况下的权限分配问题
系统中包含各个模块,模块下面又分为许多子模块,理论上是无限分级的模块。要实现对各个模块的各种权限操作。
现在有的权限包裹增、删、改、查,下载,发帖,上传权限,权限对应权限表,允许添加新权限。权限表数据结构(权限ID,权限名称,备注)。
每个模块包含权限表中的一种或多种权限,父级模块的权限子集模块不具有继承性,也就是说,对一个子集模块的父级模块具有修改权限,但是子集模块不会继承该权限。
用户的权限继承于用户组,通过调整用户组的权限来控制用户的权限。一个用户只能属于一个用户组,一个用户组可以拥有多个用户。求解 怎么实现这样情况下的权限分配问题
你可以在每个用户登录时读取该用户对各个模块的权限,保存于session中备查
如果感到模块太多,则只保存对一级模块的权限。进入模块后,再检索子模块的权限
Array
(
[0] => Array
(
[mod_id] => 1
[right_id] => 1
[group_id] => 1
) [1] => Array
(
[mod_id] => 1
[right_id] => 2
[group_id] => 1
) [2] => Array
(
[mod_id] => 1
[right_id] => 3
[group_id] => 1
) [3] => Array
(
[mod_id] => 1
[right_id] => 4
[group_id] => 1
) [4] => Array
(
[mod_id] => 2
[right_id] => 1
[group_id] => 1
) [5] => Array
(
[mod_id] => 2
[right_id] => 2
[group_id] => 1
) [6] => Array
(
[mod_id] => 3
[right_id] => 1
[group_id] => 1
).......然后修改数组的格式
array(
[mod_id] = 2^right_id + 2^right_id ......
);
把该数组写入文件中保存
用户需要判断权限是就加载自己用户组下的这个权限临时文件
首先,你难道没有内存缓存?
文件缓存的性能当然低下了啊第二,修改成数组的时候,你后面做的根本不是位运算
位运算是这个形式的:
$calcRight = 0;
foreach($rights as $right)
$calcRight |= 1 << $right;然后比较的时候
if($calcRight & $your_right) {
//有授权
} else {
//无授权
}第三,数据库有压力,则进行缓存,内存缓存,别弄文件型的,毫无性能可言。
既然你已经将所有组权限都保存到了缓存文件中了,那么还要查数据库干什么呢?用户登录时,将所隶属的组保存于 session
进入模块时,加载相应组的权限缓存文件。你是以代码形式保存的,只需 include 即可
检查对该模块的权限,作出相应动作。就可以了呀