tp5的rbac包重大更新加入JWT支持,更加简单的表生成方式,兼容SPA应用

24 篇文章 0 订阅
17 篇文章 0 订阅

更新内容浏览

  • 修复issues中的若干问题
  • 删除了过去角色的可继承关系。在日常使用中我们一般会用多角色来处理而很少会用到继承
  • rbac可以从业务剥离使用单独的数据库来实现,针对issues中所说的如果有表前缀的情况进行了适配 #7
  • 增加了jwt方式验证时token的生成,token的刷新,token的验证
  • rbac表名不可通过配置来改变(这种个性化在通用的rbac中是无意义的)
  • 减少对于user操作的干涉,不限制开发者对user的丰富
  • 角色创建同时分配权限启用以往的单独分配权限的繁琐

安装方法

先安装composer如果不知道怎么安装使用composer请自行百度。
打开命令行工具切换到你的tp5项目根目录

composer require gmars/tp5-rbac

github地址:https://github.com/gmars/tp5-rbac

v2.0+版本使用说明

配置

请将此配置加在config/app.php的配置中

'rbac' => [
    'type' => 'jwt',    //验证方式 jwt(token方式)形式或者service(基于cookie)方式
    'db' => '',        //rbac要使用的数据库配置为空则为默认库(生成表的前缀依赖此配置)
    'salt_token' => 'asdfasfdafasf',    //token加密密钥
    'token_key' => 'Authorization'      //header中用于验证token的名称
]

使用说明

实例化rbac

$rbac = new Rbac();

管理操作

初始化rbac所需的表
//可传入参数$db为数据库配置项默认为空则为默认数据库(考虑到多库的情形)
$rbac->createTable();

该方法会生成rbac所需要的表,一般只执行一次,为了安全,执行后会加锁,下次要执行需要删除锁文件再执行。

创建权限分组
$rbac->savePermissionCategory([
    'name' => '用户管理组',
    'description' => '网站用户的管理',
    'status' => 1
]);

编辑和修改调用同一个方法编辑时请在参数中包含主键id的值

创建权限节点
$rbac->createPermission([
    'name' => '文章列表查询',
    'description' => '文章列表查询',
    'status' => 1,
    'type' => 1,
    'category_id' => 1,
    'path' => 'article/content/list',
]);
  • 如果为修改则在传入参数数组中加入主键id的键值
  • type为权限类型1为后端权限2为前端权限主要考虑到spa使用
  • category_id为上一步创建的权限分组的id
  • 创建成功返回添加的该条权限数据,错误抛出异常
创建角色&给角色分配权限
$rbac->createRole([
    'name' => '内容管理员',
    'description' => '负责网站内容管理',
    'status' => 1
], '1,2,3');
  • 如果修改请在第一个参数中传入主键的键值
  • 第二个参数为权限节点的id拼接的字符串请使用英文逗号
给用户分配角色
$rbac->assignUserRole(1, [1]);
  • 该方法会删除用户之前被分配的角色
  • 第一个参数为用户id
  • 第二个参数为角色id的数组
获取权限分组列表
$rbac->getPermissionCategory([['status', '=', 1]]);
  • 参数支持传入id查询单条数据和标准的where表达式查询列表传为空数组则查询所有
获取权限列表
$rbac->getPermission([['status', '=', 1]]);
  • 参数支持传入id查询单条数据和标准的where表达式查询列表传为空数组则查询所有
获取角色列表
$rbac->getRole([], true);
  • 第一个参数支持传入id查询单条数据和标准的where表达式查询列表传为空数组则查询所有
  • 第二个参数选择是否查询角色分配的所有权限id默认为true
删除权限分组
$rbac->delPermissionCategory([1,2,3,4]);
  • 参数支持传入单个id或者id列表
删除权限
$rbac->delPermission([1,2,3,4]);
  • 参数支持传入单个id或者id列表
删除角色
$rbac->delRole([1,2,3,4]);
  • 参数支持传入单个id或者id列表
  • 删除角色会删除给角色分配的权限[关联关系]

验证操作

service方式

service方式因为要用到session一般要依赖于cookie。在用户登录后要获取用户权限操作

$rbac->cachePermission(1);
  • 传入参数为登录用户的user_id
  • 该方法会返回该用户所有的权限列表

用户请求时进行验证

$rbac->can('article/channel/list');
  • 如果有权限返回true如果没有权限返回false
jwt方式

jwt方式在前后端分离结构用的比较普遍。在用户登录后需要获取token

$rbac->generateToken(1);
  • 第一个参数为登录的用户id
  • 第二个参数为token有效期默认为7200秒
  • 第三个参数为token前缀
    返回结果为
array(3) {
  ["token"] => string(32) "4c56b80f06d3d8810b97db33a1291694"
  ["refresh_token"] => string(32) "17914241bde6bfc46b20e643b2c58279"
  ["expire"] => int(7200)
}

使用refresh_token刷新权限

$rbac->refreshToken('17914241bde6bfc46b20e643b2c58279');

请在有效期内使用refresh_token来刷新授权
用户请求时验证

$rbac->can('article/channel/list');
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarsWill

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值