发一个关于权限的思路,根据用户所属用户组来判断权限

#1 lhabc

建立一个用户组表,groupid,gname。。。。
用户表user,id,name,groupid。。。。
acl表用原来的,加一个字段标志,是否公共部分,如登录页面
权限表,对应组groupid,aclid,一个组所拥有的acl权限列表
思路是这样:开页面开始检查控制器名称和动作名,是否是公告部分标志,如果是直接返回1,就是登录的页面了。用户登录后取用户组groupid,根据groupid查询权限表中是否拥有改模块的权限。
重写checker函数
 
           public function checker($acl_name = SPANONYMOUS,$controller, $action){   
    $gid=spClass('spAcl')->get();
             $condition_ck=array('controller'=>$controller,'action'=>$action);
           $acl_check=spClass('lib_acl')->find($condition_ck);
     if($acl_check){
          if( $acl_check['flag']=='public'){
          return 1;
           }  else
      {
        $condition='groupid='.$gid;
  $qx=spClass('lib_popedom')->findAll($condition);
  $check_stat=false;
   foreach ( $qx as $qxcheck => $qxcheck_value ) {
                 if( $acl_check['aclid']==$qxcheck_value['aclid']){//模块id是否在对应组groupid权限表中
                     $check_stat=true;
          return 1;
                    }
      }
      if($check_stat==false) return 0;
            }
     }else{
     return -1;
     }
        }

顺便发一张初稿图
user.JPGuser1.JPG权限分配图.JPG
估计还有什么地方不妥,欢迎大家提出建议,或者有更高效率的做法

2011-04-21 11:22:02

#2 jake

建议是研究一下acl类,通过acl的getter和setter两个句柄,扩展实现你的想法。这样更高效和规范。

2011-04-21 13:02:56

#3 lhabc

我太out了,原来我一直用原生写代码,第一次使用框架,就是用您的,感觉比较容易上手。感谢jake提供这么好的开发框架。

2011-04-21 13:54:35

#4 小子210

我跟3楼的情况一样,谢谢jake!

2011-11-24 13:54:10

#5 kai551272

第一次接触这种权限的判断,谢谢JAKE

2012-03-08 21:50:37