关于TP的RBAC的使用

时间:2023-02-18 14:56:50

  如果你是一个TP的重度使用者的话,请自动略过笔者以下文字

权限管理我在成为一个开发者1年半内,接触过2种,一种就是数学方式 比如我们文件夹权限的755这种权限管理的方式,这种二进制的权限管理的方式 无耻得引入  http://www.cnblogs.com/qfcndtt/archive/2012/08/03/2621713.html这里讲解的也比较详细,不过这种方式适合于权限节点相对较少的系统。也很轻便。

  下面正式开始THINKPHP的RBAC的讲解

  在系统目录下的Librar/Org/Util目录下的Rbac.class.php

  在config中

  拥有着RBAC的相关的配置文件

  关于TP的RBAC的使用

  数据库的话,我以我现在的一个系统为例

  角色表 role 

  关于TP的RBAC的使用

  用户对应的角色表 role_user

  关于TP的RBAC的使用

  节点表 node

  关于TP的RBAC的使用

  权限表 access

  关于TP的RBAC的使用

  先解析下Rbac中拥有的比较重要的方法

  saveAccessList($authId=null)

  这里保存可以传空值的前提是 你在用户登录操作的时候要在 $_SESSION[C('USER_AUTH_KEY')] 中把用户的uid保存下来,然后这里会将用户所对应的角色拥有的权限都保存在$_SESSION['_ACCESS_LIST']中。 有2中例外是不保存的,一个是管理员用户(这个用户比较特殊所以需要在管理员登录的时候指定一个$_SESSION[C('ADMIN_AUTH_KEY')]) 一个是开启了实时认证 (实时认证他是不保存权限的每次权限判断的时候都会重新去获取用户的权限)

  checkAccess()

  这个是判断用户访问的模块和方法是否需要权限认证 (此方法内部调用的无需关心)

  checkLogin()

  该方法是判断用户是否登录,如果未登录则跳转到指定路径,正常的系统会跳到用户登录页面

  AccessDecision()

  该方法可是这里权限判断的关键点,因为这个方法就是判断用户是否有访问权限的,具体的逻辑是先去判断是否需要权限认证(checkAccess),然后去看是否是管理员,如果不是管理员就看是否开启了实时认证,如果开启了,就再次去调取用户的权限列表,然后去判断访问的权限是否在数组里,如果没开启则直接从$_SESSION['_ACCESS_LIST']中读取判断。

  getAccessList($authId)

  这里个人觉得才是这个类中的最为重要的方法。具体的话,笔者还是希望读者自己去看下这里的代码,应该核心就是那几个sql语句,做到了角色继承,不过我做权限管理的话,还是把这个功能默认放弃了,觉得不太方便拓展。

  /***********现在我讲解下如何使用这个Rbac*************/

  1:用户登录的情况下

  用户登录成功后保存authId;判断是否是管理员,然后调用saveAccessList去保存权限

  关于TP的RBAC的使用

  2:用户在访问系统的时候我们要做权限判断

  先去判断用户是否登录,如果未登录跳回登录页面

  然后去判断用户是否有访问的权限,如果没有则给定ajax或者页面访问的报错方式

  关于TP的RBAC的使用

  看吧就是这么简单,不过我还是建议用户尤其是经常使用tp的开发者,多去看下这些方法的源代码,毕竟读源代码对于个人的提升是很大的。

关于TP的RBAC的使用的更多相关文章

  1. Thinkphp3.2.3中的RBAC权限验证

    最近在用TP的RBAC权限控制,在这里记录学习一下.先来看看相关的概念 一.相关概念 访问控制与RBAC模型1.访问控制:        通常的多用户系统都会涉及到访问控制,所谓访问控制,是指通过某种 ...

  2. TP支持菜单动态生成RBAC权限系统数据库结构设计方案

    最简单基于RBAC权限系统数据库结构设计 包括如下几个表 1. 用户表 -- Table "t_user" DDL CREATE TABLE `t_user` ( `id` int ...

  3. tp文件上传;org/RBAC.class.php 权限类;think/page,class,php分页类;

    一.上传表单: 注意,要使用上传功能 你的表单需要设置 enctype="multipart/form-data" <form action="__URL__/up ...

  4. php开发(TP框架使用)

    由于最近玩了PHP,我向来有个原则,学一门服务端语言至少得玩两个框架,前段时间用PHP写了些demo+小项目,看见身边有人在使用TP,于是乎鼓捣学习学习.如何学,无非也就是做个小demo:就目前看来现 ...

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

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

  6. RBAC权限管理系统

    RBAC--基于角色的权限管理系统 优势: 1. 简化了用户和权限的关系 2. 易扩展,易于维护 3. RBAC不用给用户单个分配权限,只用指向对应的角色就会有对应的权限,而且分配权限和收回权限都很方 ...

  7. ThinkPHP中RBAC权限带菜单栏显示和详细权限操作

    RBAC是什么,能解决什么难题? RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制,说白了也就是用户通过角色与权限进行关联[其架构灵感来源于操作系 ...

  8. TP thinkphp 权限管理 权限认证 功能

    (如有打扰,请忽略)阿里云ECS大羊群,2U4G低至1.4折,限实名新用户,需要的点吧https://promotion.aliyun.com/ntms/act/vm/aliyun-group/tea ...

  9. PHP RBAC权限管理 基于角色的访问控制演示

    RBAC rbac:Role Based Access Controll,基于角色的访问控制. 今天理一理RBAC,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管 ...

随机推荐

  1. MongoDB实现分页(两种方法)

    1.插入实验数据 偷懒用下samus,100条. ; i < ; i++) { Document doc = new Document(); doc["ID"] = i; d ...

  2. 细数Qt开发的各种坑&lpar;欢迎围观&rpar;

    1:Qt的版本多到你数都数不清,多到你开始怀疑人生.从4.6开始到5.8,从MSVC编译器到MINGW编译器,从32位到64位,从Windows到Linux到MAC.MSVC版本还必须安装对应的VS2 ...

  3. hadoop中常见的问题

    一.在root下进行格式化 这样很糟糕 这样的话,若是第一次装的话,我的建议是将生成的文件都删掉,恢复到最开始的状态, 1. 首先你需要删除 vi conf/hdfs-site.xml   配置文件的 ...

  4. 火狐浏览器设置placeholder的时候记得改opacity

    最近做项目的时候涉及到需要修改输入框的placeholder的字体颜色,我的CSS如下: ::-webkit-input-placeholder{ color: #c5c5c5;}::-moz-pla ...

  5. PHP常用配置

    Php配置文件:php.ini(使用‘;’表示注释) Php的配置项可以在配置文件中配置,也可以在脚本中使用ini_set()函数临时配置. 语言相关配置: 1. engine:设置PHP引擎是否可用 ...

  6. springmvc文件上传和拦截器

    文件上传 用到这两个包 配置视图解析器:springmvc配置文件配置 <!-- id必须要是"multipartResolver" --> <bean id=& ...

  7. Android Widget工作原理详解&lpar;一&rpar; 最全介绍

    转载请标明出处:http://blog.csdn.net/sk719887916/article/details/46853033 ; Widget是安卓的一应用程序组件,学名窗口小部件,它是微型应用 ...

  8. 理解koa-router 路由一般使用

    阅读目录 一:理解koa-router一般的路由 二:理解koa-router命名路由 三:理解koa-router多个中间件使用 四:理解koa-router嵌套路由 五:分割路由文件 回到顶部 一 ...

  9. Global Mapper

    https://blog.csdn.net/mrib/article/details/75116373 http://www.bluemarblegeo.com/products/global-map ...

  10. 在PHP中,是以分好结束一条语句的吗

    在PHP中,是以分号结束一条语句的,这个和C语言类似. 但是,有一条例外,对于PHP结束tag之前的语句,是可以不写分号的: <?php if ($a == $b) { echo "R ...