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角色权限控制的更多相关文章

  1. rbac(基于角色权限控制)-------权限管理

    权限管理 创建一个rbac和app的应用,这个rbac主要是用来存放权限的,全称叫做基于角色权限控制 一.先看配置文件合适不,给创建的rbac在配置文件里面设置一下 找到INSTALLED_APPS= ...

  2. ThinkPHP框架下基于RBAC的权限控制模式详解

    这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...

  3. springboot + 注解 + 拦截器 + JWT 实现角色权限控制

    1.关于JWT,参考: (1)10分钟了解JSON Web令牌(JWT) (2)认识JWT (3)基于jwt的token验证 2.JWT的JAVA实现 Java中对JWT的支持可以考虑使用JJWT开源 ...

  4. php_ThinkPHP的RBAC(基于角色权限控制)详解

    一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注. 在RBAC中,权限与角色相关联,用户通 ...

  5. 简单的RBAC用户角色权限控制

    Java web项目中,无论项目是大是小,或多或少都会涉及到用户访问权限的控制,权限管理总体的设计思路就是,不该看的不看,不该做的不做!据我目前的了解,我所知道的几种实现访问权限控制的方式有: JQu ...

  6. 百万年薪python之路 -- RBAC角色权限设计

    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成"用 ...

  7. 基于RBAC的权限控制浅析(结合Spring Security)

    嗯,昨天面试让讲我的项目,让我讲讲项目里权限控制那一块的,讲的很烂.所以整理一下. 按照面试官的提问流程来讲: 一.RBAC是个啥东西了? RBAC(Role-Based Access Control ...

  8. springboot+shiro+redis(单机redis版)整合教程-续(添加动态角色权限控制)

    相关教程: 1. springboot+shiro整合教程 2. springboot+shiro+redis(单机redis版)整合教程 3. springboot+shiro+redis(集群re ...

  9. MVC基于角色权限控制--权限过滤

    用户访问服务器实际上就是访问控制器下的方法,因此在权限控制就是控制器方法的访问权限 为了方便控制,我们可以建立一个基类控制器(BaseController),让需要的控制器继承这个控制器即可,在Bas ...

随机推荐

  1. Linux定时运行与开机运行任务

    http://os.51cto.com/art/200805/75144.htm at命令与crontab命令 http://os.51cto.com/art/201007/211874.htm ht ...

  2. Android URI简介

    就Android平台而言,URI主要分三个部分:scheme, authority and path.其中authority又分为host和port.格式如下:scheme://host:port/p ...

  3. 启动Activity但不显示其界面

    最近在工作中做了一个很简单的任务,制作一个apk,点击该app链接到某一个网站.     代码很简单,只有如寥寥几行: (browser.java) package com.test.browser; ...

  4. mysql INNODB_TRX 事务表

    demo:/root# mysql -uroot -pkjk7787czcb --socket=/data01/mysql/mysql.sock -e"show processlist&qu ...

  5. -_-#Android版QQ浏览器广告过滤

    省流加速 - 广告过滤   默认开启 设别广告是添加的标签最外层标签带有adv download

  6. 【最长下降子序列】【动态规划】【二分】XMU 1041 Sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1041 题目大意: 一个二维平面,上面n(n<=1 000 000)个点.问至少选 ...

  7. Number of Islands——LeetCode

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  8. SherlockActivity也可以用依赖注入的方法:

    场景:     一个Activity必须继承RoboActivity才可以使用依赖注入. 若一个Activity已经继承了别的Activity了.比如SherlockActivity 如何才能使用依赖 ...

  9. HDU5032 -- Always Cook Mushroom 树状数组 14年北京网络赛

    题意:1000*1000的格子, 坐标为(1, 1) ~ (1000, 1000), 常数 A, B, 点(x,  y)权值为 (x + A) * (y + B), q次询问, 每次询问(0, 0) ...

  10. 最受欢迎linux命令

    1.   以 root 帐户执行上一条命令 sudo !! 2.  利用 Python 搭建一个简单的 Web 服务器,可通过 http://$HOSTNAME:8000访问    python -m ...