本人对thinkPHP的rbac类库的getAccessList方法有个疑问

浏览:775 发布日期:2016/04/20 分类:求助交流
直接贴代码$sql    =   "select node.id,node.name from ".
        $table['role']." as role,".
        $table['user']." as user,".
        $table['access']." as access ,".
        $table['node']." as node ".
        "where user.user_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.level=2 and node.pid={$appId} and node.status=1";
$modules =   $db->query($sql);
这里查找出apps对应的所有modules,// 判断是否存在公共模块的权限
$publicAction  = array();
foreach($modules as $key=>$module) {
    $moduleId     =     $module['id'];
    $moduleName = $module['name'];
    if('PUBLIC'== strtoupper($moduleName)) {
    $sql    =   "select node.id,node.name from ".
        $table['role']." as role,".
        $table['user']." as user,".
        $table['access']." as access ,".
        $table['node']." as node ".
        "where user.user_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.level=3 and node.pid={$moduleId} and node.status=1";
        $rs =   $db->query($sql);var_dump($rs);
        foreach ($rs as $a){
            $publicAction[$a['name']]     =     $a['id'];
        }var_dump($publicAction);
        unset($modules[$key]);
        break;
    }
}
上面这段代码就是判断是否存在公共模块的权限,如果有就将公共模块下的方法保存到临时变量$publicAction,最后把整个公共模块销毁;// 依次读取模块的操作权限
foreach($modules as $key=>$module) {
    $moduleId     =     $module['id'];
    $moduleName = $module['name'];
    $sql    =   "select node.id,node.name from ".
        $table['role']." as role,".
        $table['user']." as user,".
        $table['access']." as access ,".
        $table['node']." as node ".
        "where user.user_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.level=3 and node.pid={$moduleId} and node.status=1";
    $rs =   $db->query($sql);
    $action = array();
    foreach ($rs as $a){
        $action[$a['name']]     =     $a['id'];
    }
    // 和公共模块的操作权限合并
    $action += $publicAction;
    $access[strtoupper($appName)][strtoupper($moduleName)]   =  array_change_key_case($action,CASE_UPPER);
}
最后,我不懂的就是上面这段代码为什么将公共模块的操作权限合并到其他模块,但是这些公共模块的操作是PublicController.class.php里面的方法啊,这样做还怎么判断公共模块的操作权限呢?对公共模块的判断是不是有点多余呢?
最佳答案
评论( 相关
后面还有条评论,点击查看>>