自己重写的Rbac取得当前认证号的所有权限列表方法

浏览:704 发布日期:2014/03/06 分类:技术分享 关键字: 没事扯蛋
这两天在做权限控制,在使用的官方的Rbac的时候,和自己的需求不一样,,,重写了一下Rbac::getAccessList($authId); 这个方法。一个简单的递归,,代码少了大半static public function getAccessList($authId,$pid=0){
        $db     =   Db::getInstance(C('RBAC_DB_DSN'));
        $table  = array('role'=>C('RBAC_ROLE_TABLE'),'user'=>C('RBAC_USER_TABLE'),'access'=>C('RBAC_ACCESS_TABLE'),'node'=>C('RBAC_NODE_TABLE'));
        $arr = array();
        $sql    =   "select node.id,node.name,node.title,node.show_loca,node.level from ".
                        $table['role']." as role,".
                        $table['user']." as user,".
                        $table['access']." as access ,".
                        $table['node']." as node ".
                        "where user.admin_id='{$authId}' and user.role_id=role.id and ( access.role_id=role.id  or (access.role_id=role.pid and role.pid!=0 ) ) and role.status=1 and access.node_id=node.id and node.pid={$pid} and node.status=1";
        $data =   $db->query($sql);
        foreach($data as $key=>$vo){
            $arr[strtoupper($vo['name'])] = self::getAccessList($authId,$vo['id']);
            $arr[strtoupper($vo['name'])]['id']     = $vo['id'] ;
            $arr[strtoupper($vo['name'])]['name']   = $vo['name'] ;
            $arr[strtoupper($vo['name'])]['title']  = $vo['title'] ;
            $arr[strtoupper($vo['name'])]['level']  = $vo['level'] ;
            $arr[strtoupper($vo['name'])]['show_loca'] = $vo['show_loca'] ;
        }
        return $arr ;
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>