一、什么是RBAC

基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注。

在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。

在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系可以建立起来以囊括更广泛的客观情况。

二、ThinkPHP中的RBAC

先看下官方给的实例所用到的数据表,通过5张表实现权限控制,定义如下:

RBAC 要用到5个数据表

think_user (用户表)

think_role (用户分组表)

think_node (操作节点)

think_role_user (用户和用户分组的对应)

think_access (各个操作和用户组的对应)

用户表

角色表,有哪些角色,该角色与对应的userid用户相关联

根据用户表的id给出对应的角色id相关联,也就是给用户分配角色,比如userid为3的角色为2,根据role角色表,7代表员工的角色

access表,权限表,比如角色id为2,也就是员工的权限,可以的对应的结点

结点表,代表有哪些应用-模块-模块方法,并且定义了之间的一种关系,比如noteid为30的是Public模块,noteid为31,32,33,34的方法add,insert,edit,update都属于Public。noteid为85的test方法,属于noteid为84的Game模块下的方法。

字段name就是当项目,模块或者操作的名称了。

字段PID 记录他们的从属关系,比如某一个模块是属于哪个项目,某个操作属于哪个模块。

字段level 表示该节点的层级 换句话就是说 level=1 为项目 ,level=2为模块 ,level=3就是操作了,比如说 admin项目,他的PID 就是 0 (项目的PID都是0) level就是1,nane就是admin了,admin项目下面有的user模块,它的level就应该是2,pid就是admin的id, admin下面user模块的add操作,level就该是3了,pid就应该是前面的user对应的ID.

三、config配置文件详解

我们看看thinkphp官方示例中的config文件:

PHP
array( 'APP_AUTOLOAD_PATH'=>'@.TagLib', 'SESSION_AUTO_START'=>true, 'USER_AUTH_ON' =>true, 'USER_AUTH_TYPE' =>1, // 默认认证类型 1 登录认证 2 实时认证 'USER_AUTH_KEY' =>'authId', // 用户认证SESSION标记 'ADMIN_AUTH_KEY' =>'administrator', 'USER_AUTH_MODEL' =>'User', // 默认验证数据表模型 'AUTH_PWD_ENCODER' =>'md5', // 用户认证密码加密方式 'USER_AUTH_GATEWAY' =>'/Public/login',// 默认认证网关 'NOT_AUTH_MODULE' =>'Public', // 默认无需认证模块 'REQUIRE_AUTH_MODULE' =>'', // 默认需要认证模块 'NOT_AUTH_ACTION' =>'', // 默认无需认证操作 'REQUIRE_AUTH_ACTION' =>'', // 默认需要认证操作 'GUEST_AUTH_ON' =>false, // 是否开启游客授权访问 'GUEST_AUTH_ID' =>0, // 游客的用户ID 'DB_LIKE_FIELDS' =>'title|remark', 'RBAC_ROLE_TABLE' =>'think_role', 'RBAC_USER_TABLE' =>'think_role_user', 'RBAC_ACCESS_TABLE' =>'think_access', 'RBAC_NODE_TABLE' =>'think_node', 'SHOW_PAGE_TRACE'=>1//显示调试信息 );
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

array(
        'APP_AUTOLOAD_PATH'=>'@.TagLib',
        'SESSION_AUTO_START'=>true,
        'USER_AUTH_ON'              =>true,
        'USER_AUTH_TYPE' =>1, // 默认认证类型 1 登录认证 2 实时认证
        'USER_AUTH_KEY'             =>'authId', // 用户认证SESSION标记
        'ADMIN_AUTH_KEY' =>'administrator',
        'USER_AUTH_MODEL'           =>'User', // 默认验证数据表模型
        'AUTH_PWD_ENCODER'          =>'md5', // 用户认证密码加密方式
        'USER_AUTH_GATEWAY'         =>'/Public/login',// 默认认证网关
        'NOT_AUTH_MODULE'           =>'Public', // 默认无需认证模块
        'REQUIRE_AUTH_MODULE'       =>'', // 默认需要认证模块
        'NOT_AUTH_ACTION'           =>'', // 默认无需认证操作
        'REQUIRE_AUTH_ACTION'       =>'', // 默认需要认证操作
        'GUEST_AUTH_ON'             =>false,    // 是否开启游客授权访问
        'GUEST_AUTH_ID'             =>0,        // 游客的用户ID
        'DB_LIKE_FIELDS'            =>'title|remark',
        'RBAC_ROLE_TABLE'           =>'think_role',
        'RBAC_USER_TABLE'           =>'think_role_user',
        'RBAC_ACCESS_TABLE'         =>'think_access',
        'RBAC_NODE_TABLE'           =>'think_node',
        'SHOW_PAGE_TRACE'=>1//显示调试信息
    );

大家看注释就应该懂大半了,其中Public模块是无需认证的,道理很简单,没登录之前大家都是游客身份,如果登录页面也要权限,那从哪里登录呢?是吧,呵呵。默认网关地址就是认证失败,没有权限跳转到此处,重新登陆。ADMIN_AUTH_KEY表示超级管理员权限,如果你在user表建立一个名为admin的用户,那么这个用户就是超级管理员,不用给它分配权限,什么权限都有,为什么要设置一个这样的管理员,因为当你把权限分配错了容易引起系统权限混乱,搞得大家都访问不了,这时候超级管理员就来了。

四、RBAC类的几个重要的方法

authenticate($map,$model=”)方法 传入查询用户的条件和用户表的MODEL 返回数组包含用户的信息

saveAccessList($authId=null)方法 传入用户的ID 此方法不返回值,只是设置 $_SESSION[‘_ACCESS_LIST’]的值,其中包含了所有该用户对应的用户组的有权限操作的所有节点 $_SESSION[‘_ACCESS_LIST’][‘项目名’][‘模块名’][‘操作名’],以后判断权限就是判断当前项目,模块和操作是否在 $_SESSION[‘_ACCESS_LIST’]中能找到。s

checkAccess() 方法 检测当前模块和操作是否需要验证 返回bool类型

checkLogin()方法 检测登录

AccessDecision($appName=APP_NAME) 方法 就是检测当前项目模块操作 是否在$_SESSION[‘_ACCESS_LIST’]数组中,也就是说 在 $_SESSION[‘_ACCESS_LIST’] 数组中$_SESSION[‘_ACCESS_LIST’][‘当前操作’][‘当前模块’][‘当前操作’]是否存在。如果存在表示有权限 否则返回flase。

getAccessList($authId) 方法 通过查询数据库 返回权限列表 $_SESSION[‘_ACCESS_LIST’]的值了。

转载于:https://www.cnblogs.com/freestyle-le/p/4518797.html

ThinkPHP---RBAC相关推荐

  1. ThinkPHP RBAC如何自动获取所有模块的函数

    之前我写过一个例子,关于ThinkPHP RBAC权限控制的,后来又研究了下,发现在真实的情况中,很多crm,cms等,有需要去获取RBAC所有模块,然后进行权限分配等操作,或者增加删除模块. 所以就 ...

  2. ThinkPHP RBAC官网的例子详解

    一直想学习RBAC,又看了官网的例子,又百度,没找到合适的教程.所以就只能自己研究了,就拿官网的例子来说吧 think_access表 作用是看某个组是否有权限访问某个模块下的方法或者访问某个模块,这 ...

  3. Thinkphp中Auth认证

    权限管理在thinkphp有两种方式,比较常见用是RBAC,也是比较人用,容易理解,是基于节点的权限管理,Auth也可以做权限管理基于规则的权限管理,下面分别说说 1,Thinkphp RBAC权限管 ...

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

    ThinkPHP的RBAC(基于角色权限控制)详解 一.什么是RBAC 基于角色的访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到 ...

  5. ThinkPHP的RBAC权限控制

    ThinkPHP的RBAC(基于角色权限控制)详解 https://blog.csdn.net/renxing518/article/details/78192311 https://edu.51ct ...

  6. php中rbac三张表的关系,thinkPHP的RBAC权限管理

    thinkPHP的RBAC权限管理 如何进行thinkPHP的rbac权限管理呢?下面是由百分网小编为大家整理的thinkPHP的RBAC权限管理,喜欢的可以收藏一下!了解更多详情资讯,请关注应届毕业 ...

  7. php中rbac三张表的关系,thinkphp中RBAC数据表分析

    /// /// AC二元组.它是9种AC元素对象的二元组.但它区分Subject(主体)和Object(客体)从而为二元关系规定了方向. /// 9大AC元素是:Account.Organizatio ...

  8. php auth和rbac区别,THINKPHP中的AUTH权限管理介绍

    AUTH权限管理的原理 最简单的auth权限管理的4张数据表如下图 每一个功能对应的一个url路径,规则表其实就是记录url路径,通过url来实现权限管理 权限验证时机分类 前置验证 所谓前置认证,就 ...

  9. php面试框架的执行流程图,ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程

    ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问http:///My/index.php/Index/show/所执行的流程进行详细的分析 ...

  10. rbac权限管理 php,thinkPHP3.2使用RBAC实现权限管理的实现

    在thinkphp3.2中自己集成了RBAC来实现权限管理,RBAC实现类在项目中地址为:ThinkPHP/Librar/Org/Util/Rbac.class.php,其中集成了我们所需的权限管理操 ...

最新文章

  1. UC伯克利新机器人成果:灵活自由地使用工具
  2. 【Spark Summit EU 2016】使用Spark和StreamSets构建数据通道
  3. Mac使用自带的屏幕共享实现VNC连接KVM时需要输入密码的问题解决
  4. Centos 7 安装 gcc-5.5
  5. golang中的strings.Replace
  6. GPM - 多语言实现视频
  7. 风变的python课程怎么样_风的解释|风的意思|汉典“风”字的基本解释
  8. c++语言 tcp例子,C++中TCP通信实现文件传输
  9. 直播丨数据安全:Oracle多场景下比特币勒索的揭密与恢复实战
  10. 电动汽车又“火了” 面对频繁自燃事故 蔚来不得不这样做...
  11. sqlite字段类型说明
  12. selenium chromedriver usage
  13. android 网络错误分析,android wifi打开过程源码解析及Wifi打开失败原因分析
  14. TensorFlow 强化学习快速入门 -- Kaushik Balakrishnan 读后感
  15. Matlab 输入输出命令
  16. 龙贝格积分——matlab实现
  17. 关于安装ANACONDA遇到的无法定位动态链接库问题
  18. 看完《我的前半生》的些许感悟
  19. 求饶不经过原点的旋转轴的旋转矩阵
  20. Graphics2D 使用详解 【转】

热门文章

  1. mysql gtid深入_深入理解MySQL 5.7 GTID系列(四):mysql.gtid_executedPREVIOUS GTID EVENT
  2. java中删除最大的数,【Java练习】删除字符串中字符个数最少的字符
  3. ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令
  4. Android实现自定义相册,在Android Gallery App中创建自定义相册
  5. java违反唯一约束异常_Caused by: java.sql.BatchUpdateException: ORA-00001: 违反唯一约束条件 (DSPACE.SYS_C007868)...
  6. IDEA(2021)最全常用快捷键《必须收藏》
  7. numpy python 兼容_Python 2和3之间的numpy数组的不兼容性
  8. linux 中的时间戳功能,Linux中时间戳取证研究
  9. java 常见 错误_JAVA几个常见错误简析
  10. uos配置 java 环境变量_CentOS 7.3 环境配置java和tomcat开机启动