一。安装

1.下载gmars/tp5-rbac

composer require gmars/tp5-rbac

如果该方法报错请按照以下方式操作:

  1. 打开项目根目录下的composer.json
  2. 在require中添加"gmars/tp5-rbac": "dev-master"
  3. 运行composer update

添加后composer.json应该有这样的部分:

"require": {
  "php": ">=5.4.0",
  "topthink/framework": "^5.0",
  "gmars/tp5-rbac": "dev-master"
},

这一步完成后系统会在autoload_psr4.php中添加了配置,如果调用报错不存在就要检查这里。

2.数据迁移

##数据迁移(可选,可以直接使用包中的gmars_rbac.sql文件导入) 在使用本插件之前需要有rbac锁需要的数据库。在迁移之前如果你的数据库中已有user数据表那么请你备份自己的user数据表后删除。

在你的项目的某个config.php中加入如下配置:

'migration' => [
  'path' => ROOT_PATH .'vendor/gmars/tp5-rbac/'
],

然后把命令行切换到你的项目根目录Windows是cmd运行tp5数据迁移命令

php think migrate:run

如果迁移运行成功会在你的数据库中生成如下几张表:

  1. user 用户表
  2. user_role 用户角色对应表
  3. role 角色表
  4. role_permission 角色权限对应表
  5. permission 角色表

2。调用

###使用该插件--RBAC的管理

在一个系统中RBAC是基于角色的权限控制。作为开发人员需要明白这是两个不同的过程。第一个就是构建系统的RBAC结构,包括添加权限,角色,用户,用户角色对应关系,角色权限对应关系等。

在此先说明RBAC管理:

1.添加用户

这一步是在用户注册时要做的一步,就是讲注册的用户添加到user表中。

  1. $rbacObj = new Rbac();
  2. $data = ['user_name' => 'zhangsan', 'status' => 1, 'password' => md5('zhangsan')];
  3. $rbacObj->createUser($data);

创建用户时传入唯一一个参数必须是数组。数组中应该包含用户表需要的数据。如果出现其他非user表的字段则会抛出异常。 该方法返回的结果为false或者Exception或者新添加用户的id。

2.添加权限

这一步是构建系统的权限。一般我们是以请求的路由为权限的识别标志。在该插件中使用path字段。

例如我们的系统中有商品列表这样的一个操作需要授权。

其路由为 /index/goods/list

添加路由如下:

  1. $rbacObj = new Rbac();
  2. $data = [
  3. 'name' => '商品列表',
  4. 'status' => 1,
  5. 'description' => '查看商品的所有列表',
  6. 'path' => '/index/goods/list',
  7. 'create_time' => time()
  8. ];
  9. $rbacObj->createPermission($data);

3.添加角色

在RBAC的角色中角色是有父子关系的,也就是说所添加的角色可以是另一个角色的子角色。

  1. $rbacObj = new Rbac();
  2. $data = [
  3. 'name' => '商品管理员',
  4. 'status' => 1,
  5. 'description' => '商品管理员负责商品的查看修改删除等操作',
  6. 'sort_num' => 10,
  7. 'parent_id' => 1
  8. ];
  9. $rbacObj->createRole($data);

需要注意的是在data中有个字段为parent_id这个字段标识了所要添加的角色的父角色。如果留为空则便是添加的父角色。

4.为用户分配角色

当然一个用户可以有多个角色。一般是使用多选框或其他形式选择后以数组的方式传入的。

例如:

  1. $rbacObj = new Rbac();
  2. $rbacObj->assignUserRole(1, [1, 2]);
  3. assignUserRole($userId, array $roleArray = [])

该方法的第一个参数为用户id第二个参数是一个一位数组,其元素为角色的id

5.为角色分配权限

例如:

  1. $rbacObj = new Rbac();
  2. $rbacObj->assignRolePermission(1, [1, 2]);

将id分别为1,2的权限分配给id为1的角色

6.删除角色

  1. 删除角色的同时必须删除角色和权限的对应数据
  2. $rbacObj = new Rbac();
  3. $rbacObj->delRole(1);

其中需要传入的是角色id

7.将一个角色移到另一个角色下

以上已经说明了角色是有父子关系的那么肯定能够移动其位置

  1. $rbacObj = new Rbac();
  2. $rbacObj->moveRole(1,3);

该例子是将id为1的角色移动到id为3的角色下作为子角色。

还有其他修改删除等方法的文档日后再补全,功能是有的

###使用该插件--RBAC权限验证

####登录后获取权限列表 如果自己写权限验证则请忽略这一步,如果要使用rbac插件来验证权限则必须要这样做。

在登录成功后做如下操作:

  1. $rbacObj = new Rbac();
  2. $rbacObj->cachePermission(1);

这个方法是查询id为1的用户的所有权限并且以path索引后存入cache

####请求时的权限验证

当然对于每一个方法都要进行权限验证时我们一般是在某一个父类中定义一个方法进行权限验证,验证如下:

  1. $rbacObj = new Rbac();
  2. $rbacObj->can('/index/goods/list');

该方法是验证当前用户有没有操作/index/goods/list的权限,如果有则返回true如果无则返回false

tp-rbac应该这么用的更多相关文章

  1. 关于TP的RBAC的使用

    如果你是一个TP的重度使用者的话,请自动略过笔者以下文字 权限管理我在成为一个开发者1年半内,接触过2种,一种就是数学方式 比如我们文件夹权限的755这种权限管理的方式,这种二进制的权限管理的方式 无 ...

  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,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管 ...

  10. 详细说明php的4中开源框架(TP,CI,Laravel,Yii)

    ThinkPHP简称TP,TP借鉴了Java思想,基于PHP5,充分利用了PHP5的特性,部署简单只需要一个入口文件,一起搞定,简单高效.中文文档齐全,入门超级简单.自带模板引擎,具有独特的数据验证和 ...

随机推荐

  1. 用session防止网站页面被频繁刷新

    session防止网站页面频繁被刷新 <?php //公司网站老是受到攻击,这是之前在网上看到的一个用session防止IP频繁访问的方法,我们公司用的是Memcache,都差不多,就是存储方式 ...

  2. 石子归并(区间dp 模板)

    区间dp入门 #include<iostream> #include<cstdio> #include <cctype> #include<algorithm ...

  3. C.Minimum Array(二分+set)

    题目描述: 知识点: lower_bound和uper_bound lower_bound(起始地址,结束地址,要查找的数值) 返回的是数值 第一个 出现的位置. upper_bound(起始地址,结 ...

  4. 开发环境搭建之springboot+tk.mybatis整合使用逆向工程

    一,引入xml文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorCo ...

  5. $().on()的知识点

    事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签. 假设一个元素div,它有一个下级元素p.<div> <p>元素</p></ ...

  6. I2C 连接 12864 OLED 屏幕

    http://ardui.co/archives/738 我是潘,曾经是个工程师.这是为 Ardui.Co 制作的 “Arduino 公开课” 系列的入门教程.上一课介绍了I2C 协议连接1602 L ...

  7. C++中继承 声明基类析构函数为虚函数作用,单继承和多继承关系的内存分布

    1,基类析构函数不为虚函数 #include "pch.h" #include <iostream> class CBase { public: CBase() { m ...

  8. xamarin/xamarin.forms 在锁屏电源唤醒时保持后台运行

    PARTIAL_WAKE_LOCK:保持CPU 运转,屏幕和键盘灯有可能是关闭的. SCREEN_DIM_WAKE_LOCK:保持CPU 运转,允许保持屏幕显示但有可能是灰的,允许关闭键盘灯 SCRE ...

  9. 用户价值和RFM模型

    什么是用户价值? 用户价值就是对公司来说有用的地方,比如有的公司看中用户的消费能力,有的公司则看中用户的忠诚度 .各公司的业务目的不同,用户价值的体现自然也不同.这里主要说一下适用于电商的RFM模型. ...

  10. web前端开发面试被虐篇(一)

    地点:北京 职位:前端开发工程师 要求:达到中级开发,JS基础足够扎实,css基础扎实,要求纯手写代码 面试过程: 进门一个面相老成的大叔递给我一份题,说别的都不好使先做题看看水平,说话语气很温和明显 ...