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 ...
随机推荐
- raspberry pi 3 截图及查看
RASPBIAN JESSIE WITH PIXEL Image with PIXEL desktop based on Debian Jessie Version:November 2016 Rel ...
- 之前采用的是Helper类的方法重构时改用了扩展方法
在手机端输入网址不方全,通常会将网址做成一个二维码,然后用手机扫一下就可以打开预览.我们每改一下样式,就在手机上点一下刷新或电脑上按一下F5,这在最初的时候,也不觉得有什么问题,因为拿到我手上的静态页 ...
- iOS开发网络篇-JSON文件的解析
一.什么是JSON数据 1.JSON的简单介绍 JSON:是一种轻量级的传输数据的格式,用于数据的交互 JSON是javascript语言的一个子集.javascript是个脚本语言(不需要编译),用 ...
- Ural 1099 Work Scheduling
http://acm.timus.ru/problem.aspx?space=1&num=1099 题意:有n个人,很多对合作关系,每个人只能和一个人合作,求最多能选出多少人. 一般图匹配 # ...
- PS/2接口
ps/2接口标准的发展过程 随着计算机工业的发展,作为计算机最常用输入设备的键盘也日新月异.1981年IBM推出了IBM pc/XT键盘及其接口标准.该标准定义了83键,采用5脚DIN连接器和简单的串 ...
- Delphi TNativeXML Node节点乱码的一种解决方法
Node1.WriteString(HomologousFieldItem.cXMLNodeCode, AnsiToUtf8(FieldByName(HomologousFieldItem.cMapp ...
- Application之图书馆
前两天小编讲的都是些比较隐私的东西,为啥隐私?因为它俩(cookie和session)都只有用户自已才能使用和访问,今天小编来介绍个比较开放点的东西给大家. 小编虽已脱下学生服装多年,但如今忆起当年校 ...
- Emacs添加主题插件(Win系统)
Emacs添加主题插件(Win系统) */--> /* @licstart The following is the entire license notice for the JavaScri ...
- 关于Cookie和Session【转载】
当你第一次访问一个网站的时候,网站服务器会在响应头内加上Set-Cookie:PHPSESSID=nj1tvkclp3jh83olcn3191sjq3(php服务器),或Set-Cookie JSES ...
- IOS--跳转方式两种
带导航栏的Push跳转: FloatPassViewController *floatpass = [self.storyboard instantiateViewControllerWithIden ...