tp-rbac应该这么用
一。安装
1.下载gmars/tp5-rbac
composer require gmars/tp5-rbac
如果该方法报错请按照以下方式操作:
- 打开项目根目录下的composer.json
- 在require中添加"gmars/tp5-rbac": "dev-master"
- 运行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
如果迁移运行成功会在你的数据库中生成如下几张表:
- user 用户表
- user_role 用户角色对应表
- role 角色表
- role_permission 角色权限对应表
- permission 角色表
2。调用
###使用该插件--RBAC的管理
在一个系统中RBAC是基于角色的权限控制。作为开发人员需要明白这是两个不同的过程。第一个就是构建系统的RBAC结构,包括添加权限,角色,用户,用户角色对应关系,角色权限对应关系等。
在此先说明RBAC管理:
1.添加用户
这一步是在用户注册时要做的一步,就是讲注册的用户添加到user表中。
- $rbacObj = new Rbac();
- $data = ['user_name' => 'zhangsan', 'status' => 1, 'password' => md5('zhangsan')];
- $rbacObj->createUser($data);
创建用户时传入唯一一个参数必须是数组。数组中应该包含用户表需要的数据。如果出现其他非user表的字段则会抛出异常。 该方法返回的结果为false或者Exception或者新添加用户的id。
2.添加权限
这一步是构建系统的权限。一般我们是以请求的路由为权限的识别标志。在该插件中使用path字段。
例如我们的系统中有商品列表这样的一个操作需要授权。
其路由为 /index/goods/list
添加路由如下:
- $rbacObj = new Rbac();
- $data = [
- 'name' => '商品列表',
- 'status' => 1,
- 'description' => '查看商品的所有列表',
- 'path' => '/index/goods/list',
- 'create_time' => time()
- ];
- $rbacObj->createPermission($data);
3.添加角色
在RBAC的角色中角色是有父子关系的,也就是说所添加的角色可以是另一个角色的子角色。
- $rbacObj = new Rbac();
- $data = [
- 'name' => '商品管理员',
- 'status' => 1,
- 'description' => '商品管理员负责商品的查看修改删除等操作',
- 'sort_num' => 10,
- 'parent_id' => 1
- ];
- $rbacObj->createRole($data);
需要注意的是在data中有个字段为parent_id这个字段标识了所要添加的角色的父角色。如果留为空则便是添加的父角色。
4.为用户分配角色
当然一个用户可以有多个角色。一般是使用多选框或其他形式选择后以数组的方式传入的。
例如:
- $rbacObj = new Rbac();
- $rbacObj->assignUserRole(1, [1, 2]);
- assignUserRole($userId, array $roleArray = [])
该方法的第一个参数为用户id第二个参数是一个一位数组,其元素为角色的id
5.为角色分配权限
例如:
- $rbacObj = new Rbac();
- $rbacObj->assignRolePermission(1, [1, 2]);
将id分别为1,2的权限分配给id为1的角色
6.删除角色
- 删除角色的同时必须删除角色和权限的对应数据
- $rbacObj = new Rbac();
- $rbacObj->delRole(1);
其中需要传入的是角色id
7.将一个角色移到另一个角色下
以上已经说明了角色是有父子关系的那么肯定能够移动其位置
- $rbacObj = new Rbac();
- $rbacObj->moveRole(1,3);
该例子是将id为1的角色移动到id为3的角色下作为子角色。
还有其他修改删除等方法的文档日后再补全,功能是有的
###使用该插件--RBAC权限验证
####登录后获取权限列表 如果自己写权限验证则请忽略这一步,如果要使用rbac插件来验证权限则必须要这样做。
在登录成功后做如下操作:
- $rbacObj = new Rbac();
- $rbacObj->cachePermission(1);
这个方法是查询id为1的用户的所有权限并且以path索引后存入cache
####请求时的权限验证
当然对于每一个方法都要进行权限验证时我们一般是在某一个父类中定义一个方法进行权限验证,验证如下:
- $rbacObj = new Rbac();
- $rbacObj->can('/index/goods/list');
该方法是验证当前用户有没有操作/index/goods/list的权限,如果有则返回true如果无则返回false
tp-rbac应该这么用的更多相关文章
- 关于TP的RBAC的使用
如果你是一个TP的重度使用者的话,请自动略过笔者以下文字 权限管理我在成为一个开发者1年半内,接触过2种,一种就是数学方式 比如我们文件夹权限的755这种权限管理的方式,这种二进制的权限管理的方式 无 ...
- TP支持菜单动态生成RBAC权限系统数据库结构设计方案
最简单基于RBAC权限系统数据库结构设计 包括如下几个表 1. 用户表 -- Table "t_user" DDL CREATE TABLE `t_user` ( `id` int ...
- tp文件上传;org/RBAC.class.php 权限类;think/page,class,php分页类;
一.上传表单: 注意,要使用上传功能 你的表单需要设置 enctype="multipart/form-data" <form action="__URL__/up ...
- php开发(TP框架使用)
由于最近玩了PHP,我向来有个原则,学一门服务端语言至少得玩两个框架,前段时间用PHP写了些demo+小项目,看见身边有人在使用TP,于是乎鼓捣学习学习.如何学,无非也就是做个小demo:就目前看来现 ...
- ThinkPHP框架下基于RBAC的权限控制模式详解
这几天因为要做一个项目,需要可以对Web应用中通用功能进行封装,其中一个很重要的涉及到了对用户.角色和权限部分的灵活管理.所以基于TP框架自己封装了一个对操作权限和菜单权限进行灵活配置的可控制模式. ...
- RBAC权限管理系统
RBAC--基于角色的权限管理系统 优势: 1. 简化了用户和权限的关系 2. 易扩展,易于维护 3. RBAC不用给用户单个分配权限,只用指向对应的角色就会有对应的权限,而且分配权限和收回权限都很方 ...
- ThinkPHP中RBAC权限带菜单栏显示和详细权限操作
RBAC是什么,能解决什么难题? RBAC是Role-Based Access Control的首字母,译成中文即基于角色的权限访问控制,说白了也就是用户通过角色与权限进行关联[其架构灵感来源于操作系 ...
- TP thinkphp 权限管理 权限认证 功能
(如有打扰,请忽略)阿里云ECS大羊群,2U4G低至1.4折,限实名新用户,需要的点吧https://promotion.aliyun.com/ntms/act/vm/aliyun-group/tea ...
- PHP RBAC权限管理 基于角色的访问控制演示
RBAC rbac:Role Based Access Controll,基于角色的访问控制. 今天理一理RBAC,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管 ...
- 详细说明php的4中开源框架(TP,CI,Laravel,Yii)
ThinkPHP简称TP,TP借鉴了Java思想,基于PHP5,充分利用了PHP5的特性,部署简单只需要一个入口文件,一起搞定,简单高效.中文文档齐全,入门超级简单.自带模板引擎,具有独特的数据验证和 ...
随机推荐
- 面试必备技能:HashMap哪些技术点会被经常问到?
1.为什么用数组+链表? 数组是用来确定桶的位置,利用元素的key的hash值对数组长度取模得到. 链表是用来解决hash冲突问题,当出现hash值一样的情形,就在数组上的对应位置形成一条链表.ps: ...
- NLP从词袋到Word2Vec的文本表示
在NLP(自然语言处理)领域,文本表示是第一步,也是很重要的一步,通俗来说就是把人类的语言符号转化为机器能够进行计算的数字,因为普通的文本语言机器是看不懂的,必须通过转化来表征对应文本.早期是基于规则 ...
- HDU4814——数学,模拟进制转换
本题围绕:数学公式模拟进制转换 HDU4814 Golden Radio Base 题目描述 将一个十进制的非负整数转换成E(黄金分割数)进制的数 输入 不大于10^9的非负整数,处理到文件尾 输出 ...
- Linux中的CentOS 6克隆之后修改
Centos6 克隆后的简单的网络配置 第一步:修改主机名 $ vi /etc/sysconfig/network 第二步: $ vi /etc/udev/rules.d/70-persis ...
- Dubbo源码分析:Filter
类图 Filter链 在ProtocolFilterWrapper对象中完成Filter完成组建. 实现代码
- MySQL高级管理
#mysql数据库密码的修改 一.mysql密码的修改与恢复 1.修改密码 mysqladmin -u root -p123 password 456 数据库内修改 method.first: upd ...
- LeetCode 935. Knight Dialer
原题链接在这里:https://leetcode.com/problems/knight-dialer/ 题目: A chess knight can move as indicated in the ...
- cube.js 学习(十)cube 来自官方的学习网站
尽管cube.js 包含了一个doc 站点,但是资料不是很全,同时如果查看了cube github 代码中的一些demo的话,发现还是很不错的 但是一些实践没有在文档展现出来,还好我们可以从cube ...
- windows 获取时间戳
Windows 批处理时间戳 1.时间戳格式: 取年份: echo %date:~,% 取月份: echo %date:~,% 取日期: echo %date:~,% 取星期: echo %date: ...
- 17-ESP8266 SDK开发基础入门篇--TCP服务器 RTOS版,小试牛刀
https://www.cnblogs.com/yangfengwu/p/11105466.html 现在开始写... lwip即可以用socket 的API 也可以用 netconn 的API实 ...