这里,主要补充的是配置以及相关代码问题。
<?php return array( //‘配置项‘=>‘配置值‘ ‘RBAC_SUPERADMIN‘ => ‘admin‘,//超级管理员名称,对应用户表中某一个用户:username ‘ADMIN_AUTH_KEY‘ => ‘superadmin‘,//超级管理员识别 ‘USER_AUTH_ON‘ => true, //是否需要认证 ‘USER_AUTH_TYPE‘ => 1, //认证类型 1-登陆后认证,2-实时认证 ‘USER_AUTH_KEY‘ => ‘authId‘, //认证识别号,此处可以自定义 //‘REQUIRE_AUTH_MODULE‘ => ‘‘, //需要认证模块 ‘NOT_AUTH_MODULE‘ => ‘User,Index,Safe‘, //无需认证模块,和上面重复 ‘NOT_AUTH_ACTION‘ => ‘addRoleHandle,addNodeHandle,addUserHandle,accessHandle‘,//无需认证操作 //‘USER_AUTH_GATEWAY‘ => ‘‘, //认证网关,此处可以不用 //‘RBAC_DB_DSN‘ => ‘‘, //数据库连接DSN ‘RBAC_ROLE_TABLE‘ => ‘tp_role‘, //角色表名称 ‘RBAC_USER_TABLE‘ => ‘tp_role_user‘, //用户表名称 ‘RBAC_ACCESS_TABLE‘ => ‘tp_access‘, //权限表名称 ‘RBAC_NODE_TABLE‘ => ‘tp_node‘, //节点表名称
这个一栏作为菜单,必定有其相应的代码:
//左边菜单 public function left(){ // var_dump(session(‘role-id‘)); $this -> assign("ouba",session(‘role-id‘)); //超级管理员 if(session(C(‘ADMIN_AUTH_KEY‘))){ $node = D(‘Tp_node‘) ->relation(true)-> where(‘level = 2‘) -> order(‘sort‘)-> select(); }else{ //取出所有权限节点 $node = D(‘Tp_node‘) ->relation(true)-> where(‘level = 2‘) -> order(‘sort‘)-> select(); //取出当前登录用户所有权限(英文名称)和操作权限 $module = ‘‘; $node_id = ‘‘; $accessList = $_SESSION[‘_ACCESS_LIST‘]; foreach($accessList as $key => $value){ foreach($value as $key1 => $value1){ $module = $module.‘,‘.$key1; foreach($value1 as $key2 => $value2){ // $node_id = $node_id.‘,‘.$key2; $node_id = $node_id.‘,‘.$value2; } } } //去掉没有权限的节点 foreach($node as $key => $value){ if(!in_array(strtoupper($value[‘name‘]),explode(‘,‘,$module))){ unset($node[$key]); } else{ //模块存在,比较里面的操作 foreach($value[‘node‘] as $key1 => $value1){ // if(!in_array(strtoupper($value1[‘name‘]),explode(‘,‘,$node_id))){ if(!in_array(strtoupper($value1[‘id‘]),explode(‘,‘,$node_id))){ unset($node[$key][‘node‘][$key1]); //一层一层下来,删除此操作 } } } } } $this -> assign(‘node‘,$node); $this->display(); }
注意几点:该函数方法主要对于权限的节点的处理,其中使用的“大D”,则在Model,中必有其对应的映射关系:
<?php namespace Manage\Model; use Think\Model\RelationModel; class TpNodeModel extends RelationModel{ protected $_link = array( ‘Tp_node‘=>array( ‘mapping_type‘=> self::HAS_MANY, ‘parent_key‘=>‘pid‘, // ‘class_name‘=> ‘Article‘, ‘foreign_key‘=> ‘id‘, ‘mapping_name‘ => ‘node‘, // ‘mapping_order‘ => ‘create_time desc‘, ), ); } ?>
原文:http://www.cnblogs.com/wuheng1991/p/5197089.html