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 ...
随机推荐
- 使用putty登陆cygwin出现server unexpectedly ...error.解决方案
将cygwin安装目录下/etc/passwd中的passwd文件中user:unused:32707:10513:U-CYOU-INC\user,S-1-5-21-2645613570-259884 ...
- could only be replicated to 0 nodes, instead of 1
周末机房断电,然后hadoop爆出如题的错误,解决方案就是关闭所有节点的防火墙,相关命令如下: 查看防火墙状态: /etc/init.d/iptables status 暂时关闭防火墙: /etc/i ...
- Qt中添加背景图片的方法
工作似乎走上正轨了,上周五的工作是做一个界面,用到QFrame和QPushButton,QFrame做主面板,QPushButton为其子控件,需要在主面板上贴背景图片,还需要在QPushButton ...
- COJ 0985 WZJ的数据结构(负十五)(限定区域不同数)
传送门:http://oj.cnuschool.org.cn/oj/home/addSolution.htm?problemID=955 试题描述: CHX有一个问题想问问大家.给你一个长度为N的数列 ...
- 【转】Android进阶2之Activity之间数据交流(onActivityResult的用法)----不错
原文网址:http://blog.csdn.net/sjf0115/article/details/7387467 主要功能: 在一个主界面(主Activity)上能连接往许多不同子功能模块(子Act ...
- (转载)php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗?
(转载)http://s.yanghao.org/program/viewdetail.php?i=184313 php的类中可以不定义成员变量,直接在构造方法中使用并赋值吗? class block ...
- Posix-linux_route
route命令显示或者修改本地IP路由表. 语法: [plain] route [-CFvnee] route [-v] [-A family] add [-net|-host] ...
- java笔记10之循环
关于for 循环语句:for循环,while循环,do...while循环. for循环格式: for(初始化语句;判断条件语句;控制条件语句) { ...
- Android 开发经验
学习社区 eoe移动开发者社区 (link) 链接:http://www.eoeandroid.com/ 环境配置 Cocos2d-x 3.x 全平台新手开发配置教程 链接:http://www.co ...
- PHP读取文件内容的三种方式
<?php // 第一种读取方式 header("content-type:text/html;charset=utf-8"); // 文件路径 $fileA = " ...