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 ...
随机推荐
- easyui tabs 真正刷新用法
//刷新当前标签Tabs function RefreshTab(currentTab) { var url = $(currentTab.panel('options')).attr('href') ...
- C语言学习--链表
#include "node.h" #include<stdio.h> #include<stdlib.h> //typedef struct _node ...
- 【Hybrid App】一个产品经理眼中的PhoneGap Vs. AppCan
首先在写这篇文章前,必须先申明一下,本人是技术出身,对HTML技术及手机客户端都有过编程经验,只是出于工作岗位的变动,便没有再具体代码工作,以下文章涉及的中间件的基本代码实现及前期的API使用,都是自 ...
- Ubuntu14.04 安装QQ国际版wine-qqintl
Ubuntu14.04安装qq国际版方式: 首先下载,链接为: https://pan.baidu.com/s/1boPitVD 密码:jp1j 也可去Ubuntu中文的Kylin(优麒麟)官网下载 ...
- LINQ to SQLite完美解决方案
1.下载安装LinqConnectExpress(就是LinqConnect免费版) 2.安装好后就和LINQ TO SQL 一样了! 3.查询(增删改查和LINQ TO SQL 完全一样,你可以不 ...
- Domain Shutdown Error(JBAS010850)
In a manged domain, the shutdown operation is not located in the root resource (i.e. address []). A ...
- 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记
在SDN的架构中,控制器可以说是SDN的核心,它负责对底层转发设备的控制以及向上层应用提供可编程性的北向接口.从实现上看,主要分三个层面来考虑,南向接口技术,北向接口技术以及东西向的可扩展性能力.下面 ...
- hdu3656Fire station(DLX重复覆盖 + 二分)
题目请戳这里 题目大意:一个城市n个点,现在要建m个消防站,消防站建在给定的n个点中.求建m个消防站后,m个消防站要覆盖所有的n个点的覆盖半径最小. 题目分析:重复覆盖问题,DLX解决.不过要求覆盖半 ...
- Sublime代码折叠
一.显示折叠小三角 1.点击Sublime的Preferences->Setting-Default菜单,打开它的配置文件. 2.找到行 // Fold buttons are the tria ...
- Lenovo G40-30 Install win7
SATA Controller mode 两种硬盘模式,如果装XP应该要选第二种模式,兼容:据说ACHI比IDE模式性能好,开机能快点, 装Win7,两种模式都可以,只不过装Win7一般人都用ACHI ...