RBAC角色权限控制
RBAC角色权限控制
1. user (用户表)
* 用户的基本信息(mid:用户信息id 如图)

2. node (节点表)
* 页面(模块\控制器\方法)

3. role_node(角色、节点关联表)
* 节点与角色(页面与角色)的对应关系(多对多)

4. role (角色表)
* 角色组

5. user_role (用户角色关联表)
* 用户与角色的对应关系(一对一)

* 如果允许一个用户设置多个角色,那么角色权限鉴定一般使用两种方法:
1. 角色组的权限取并集 (即:只要其中一个组拥有权限,用户就能使用该权限)
2. 角色组的权限取交集(即:多个组同时拥有的权限,用户才能使用)
权限检测模型:
1. 使用role_node表,通过用户的rid(角色id,允许一个用户拥有多个角色)与nid(页面:模块\控制器、方法)查询用户是否拥有权限
<?php
namespace Common\model;
class Rbac{
// 检验是否登录
public function is_login(){
if( !session('uid') ){
return false;
}else{
return true;
}
}
// 检验权限
public function check_access($rids=[],$actions){
$access_table=C('ACCESS_TABLE');
$node_table=C('NODE_TABLE');
if(self::filter_module()){
return true;
}else{
return false;
}
$status = M($table_name)->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;
}
} }
?>
行为监听:
<?php
namespace Common\Behavior;
use Think\Behavior;
class ControllerBehavior extends Behavior{
// 行为执行入口
public function run(&$param){
if( !in_array(CONTROLLER_NAME,array('Index','Public','Weixin','Test')) ){
if( D('Rbac')->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') );
}
}
}
}
?>
RBAC角色权限控制的更多相关文章
- rbac(基于角色权限控制)-------权限管理
权限管理 创建一个rbac和app的应用,这个rbac主要是用来存放权限的,全称叫做基于角色权限控制 一.先看配置文件合适不,给创建的rbac在配置文件里面设置一下 找到INSTALLED_APPS= ...
- ThinkPHP框架下基于RBAC的权限控制模式详解
这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...
- springboot + 注解 + 拦截器 + JWT 实现角色权限控制
1.关于JWT,参考: (1)10分钟了解JSON Web令牌(JWT) (2)认识JWT (3)基于jwt的token验证 2.JWT的JAVA实现 Java中对JWT的支持可以考虑使用JJWT开源 ...
- php_ThinkPHP的RBAC(基于角色权限控制)详解
一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注. 在RBAC中,权限与角色相关联,用户通 ...
- 简单的RBAC用户角色权限控制
Java web项目中,无论项目是大是小,或多或少都会涉及到用户访问权限的控制,权限管理总体的设计思路就是,不该看的不看,不该做的不做!据我目前的了解,我所知道的几种实现访问权限控制的方式有: JQu ...
- 百万年薪python之路 -- RBAC角色权限设计
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...
- 基于RBAC的权限控制浅析(结合Spring Security)
嗯,昨天面试让讲我的项目,让我讲讲项目里权限控制那一块的,讲的很烂.所以整理一下. 按照面试官的提问流程来讲: 一.RBAC是个啥东西了? RBAC(Role-Based Access Control ...
- springboot+shiro+redis(单机redis版)整合教程-续(添加动态角色权限控制)
相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(单机redis版)整合教程 3. springboot+shiro+redis(集群re ...
- MVC基于角色权限控制--权限过滤
用户访问服务器实际上就是访问控制器下的方法,因此在权限控制就是控制器方法的访问权限 为了方便控制,我们可以建立一个基类控制器(BaseController),让需要的控制器继承这个控制器即可,在Bas ...
随机推荐
- HTML邮件注意事项
1.全局规则之一,不要写<style>标签.不要写class,所有CSS都用style属性,什么元素需要什么样式就用style写内联的CSS. 2.全局规则之二,少用图片,邮箱不会过滤你的 ...
- SANS top 20
What Are the Controls?The detailed Consensus Audit Guidelines are posted at http://www.sans.org/cag/ ...
- 【HDOJ】1158 Employment Planning
简单DP. #include <cstdio> #include <cstring> #include <cstdlib> #include <climits ...
- UOJ #78 二分图最大匹配
#78. 二分图最大匹配 从前一个和谐的班级,有 nl 个是男生,有 nr 个是女生.编号分别为 1,…,nl 和 1,…,nr. 有若干个这样的条件:第 v 个男生和第 u 个女生愿意结为配偶. 请 ...
- 【转】HashMap和HashSet的区别
原文网址:http://www.importnew.com/6931.html HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到Collection框架以及多线程的 ...
- sql优化(oracle)
系统优化中很重要的方面是SQL语句的优化,对于海量数据,优质的SQL能够有效的提高系统的可用性. 总结的有点罗嗦,列个简单的目录啦~ 目录 第一部分知识准备 ...
- InstallShield: cannot extract icon with index 0错误解决方案
在VS2012打包过程中,遇到这个错误,困扰我好几天,后来通过谷歌找到解决方案,如下: Expand the deploy solution (+) on the right panel (Solut ...
- idea 15 搭建maven web项目
加上这个创建会比较快
- C#三层开发做学生管理系统
1.定义各个层 2.添加各个层之间的引用 DAL 层调用Model BLL层调用DAL和Model UI层调用BLL和Model层 Model层供各个层调用 3.根据数据库建立实体类,每张表对应一个实 ...
- VB编写的验证码生成器
验证码(CAPTCHA)是“Completely AutomatedPublicTuring test to tell Computers andHumansApart”(全自动区分计算机和人类的图灵 ...