目的描述:
    系统中包含各个模块,模块下面又分为许多子模块,理论上是无限分级的模块。要实现对各个模块的各种权限操作。
    现在有的权限包裹增、删、改、查,下载,发帖,上传权限,权限对应权限表,允许添加新权限。权限表数据结构(权限ID,权限名称,备注)。
    每个模块包含权限表中的一种或多种权限,父级模块的权限子集模块不具有继承性,也就是说,对一个子集模块的父级模块具有修改权限,但是子集模块不会继承该权限。
    用户的权限继承于用户组,通过调整用户组的权限来控制用户的权限。一个用户只能属于一个用户组,一个用户组可以拥有多个用户。求解 怎么实现这样情况下的权限分配问题

解决方案 »

  1.   

    本系统是指web方向的系统软件开发 
      

  2.   

    这么说,还有讨论的余地
    你可以在每个用户登录时读取该用户对各个模块的权限,保存于session中备查
    如果感到模块太多,则只保存对一级模块的权限。进入模块后,再检索子模块的权限
      

  3.   

    我做的解决方案是把权限ID,用户组ID,模块ID三个字段关联到一张表中设为A表,然后在写一个权限类,在用户登录成功时自动运行,读出该用户所在组的所有权限数据。读出的样式是
    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 ......
    );
    把该数组写入文件中保存
    用户需要判断权限是就加载自己用户组下的这个权限临时文件
      

  4.   

    槽点太多…………
    首先,你难道没有内存缓存?
    文件缓存的性能当然低下了啊第二,修改成数组的时候,你后面做的根本不是位运算
    位运算是这个形式的:
    $calcRight = 0;
    foreach($rights as $right)
      $calcRight |= 1 << $right;然后比较的时候
    if($calcRight & $your_right) {
      //有授权
    } else {
      //无授权
    }第三,数据库有压力,则进行缓存,内存缓存,别弄文件型的,毫无性能可言。
      

  5.   

    可以参考Thinkphp 的做法!rbac,很方便的管理后台权限!
      

  6.   

    本帖最后由 xuzuning 于 2012-11-16 10:32:38 编辑
      

  7.   

    你不是说用户权限就是所在组的权限吗?用户的权限继承于用户组,通过调整用户组的权限来控制用户的权限。
    既然你已经将所有组权限都保存到了缓存文件中了,那么还要查数据库干什么呢?用户登录时,将所隶属的组保存于 session
    进入模块时,加载相应组的权限缓存文件。你是以代码形式保存的,只需 include 即可
    检查对该模块的权限,作出相应动作。就可以了呀