RBAC角色权限控制
1. user (用户表)
* 用户的基本信息(mid:用户信息id 如图)
2. node (节点表)
* 页面(模块\控制器\方法)
3. role_node(角色、节点关联表)
* 节点与角色(页面与角色)的对应关系(多对多)
4. role (角色表)
* 角色组
5. user_role (用户角色关联表)
* 用户与角色的对应关系(一对一)
* 如果允许一个用户设置多个角色,那么角色权限鉴定一般使用两种方法:
1. 角色组的权限取并集 (即:只要其中一个组拥有权限,用户就能使用该权限)
2. 角色组的权限取交集(即:多个组同时拥有的权限,用户才能使用)
权限检测模型:
1. 使用role_node表,通过用户的rid(角色id,允许一个用户拥有多个角色)与nid(页面:模块\控制器、方法)查询用户是否拥有权限
alias('a') ->join('__'.$node_table.'__'.' n on n.id=a.nid') ->where(['a.rid'=>['in',$rids],'n.url'=>$actions]) ->find(); if(status){ return true; }else{ return false; } } //检测模块是否需要检验权限 public function filter_module(){ if(MODULE_NAME===C('NOT_CHECK_MODULE')){ return true; }else{ return false; } } }?>
行为监听:
is_login() ){ // 检查登陆 $action = MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME; if( D('Rbac')->check_access(session('role_id'), $action )===false ){ redirect( U('Index/no_permissions') ); } }else{ // 没有登录 redirect( U('Index/index') ); } } } }?>