在之前我们已经了解了think3.2rbac的权限管理操作,但是在thinkphp5中thinkphp没有内置rabc操作,所以我们需要使用一个thinkphp的rbac拓展来实现权限管理,在thinkphp中我们可以使用gmars/tp5-rbac
拓展来实现权限管理
gmars/tp5-rbac地址:…
一:gmars/tp5-rbac安装
compor require gmars/tp5-rbac
二:gmars/tp5-rbac使用
1:rbac数据库创建
在gmars/tp5-rbac
中我们需要使用到六张表,分别为:权限节点表(permission),permission_category(权限分组表),role(角色表),role_permission
(角色权限关联表),ur(用户表),ur_role(用户角色关联表)
当我们使用compor将gmars/tp5-rbac
下载下来之后,我们可以发现在vendorgmarstp5-rbac
目录下有一个gmars_rbac.sql
文件,此文件内就为我们所需要创建表的sql
下面sql中###为你的表前缀,下面只是展示我们呢所需要的表sql,创建表gmars/tp5-rbac
提供了方法来帮我们自动创建我们所需要的表
//实例化rbac$rbac = new rbac();//初始化rbac所需的表,可传入参数$db为数据库配置项默认为空则为默认数据库(考虑到多库的情形)$rbac->createtable();
上面的方法会生成rbac所需要的表,一般只执行一次,为了安全,执行后会加锁,下次要执行需要删除锁文件再执行
(1):权限节点表(permission)
drop table if exists `###permission`;create table `###permission` ( `id` int(11) unsigned not null auto_increment, `name` varchar(50) not null default '' comment '权限节点名称', `type` smallint(4) unsigned not null default '0' comment '权限类型1api权限2前路由权限', `category_id` int(11) unsigned not null default '0' comment '权限分组id', `path` varchar(100) not null default '' comment '权限路径', `path_id` varchar(100) not null default '' comment '路径唯一编码', `description` varchar(200) not null default '' comment '描述信息', `status` smallint(4) unsigned not null default '0' comment '状态0未启用1正常', `create_time` int(10) unsigned not null default '0' comment '创建时间', primary key (`id`), key `idx_permission` (`path_id`,`status`)) engine=innodb default chart=utf8mb4 comment='权限节点表';
(2):permission_category(权限分组表
t foreign_key_checks=0;drop table if exists `###permission_category`;create table `###permission_category` ( `id` int(11) unsigned not null auto_increment, `name` varchar(50) collate utf8mb4_general_ci not null default '' comment '权限分组名称', `description` varchar(200) collate utf8mb4_general_ci not null default '' comment '权限分组描述', `status` smallint(4) unsigned not null default '1' comment '权限分组状态1有效2无效', `create_time` int(10) unsigned not null default '0' comment '权限分组创建时间', primary key (`id`)) engine=innodb default chart=utf8mb4 collate=utf8mb4_general_ci comment '权限分组表';
(3):role(角色表)
drop table if exists `###role`;create table `###role` ( `id` int(11) unsigned not null auto_increment, `name` varchar(50) not null default '' comment '角色名', `description` varchar(200) not null default '' comment '角色描述', `status` smallint(4) unsigned not null default '0' comment '状态1正常0未启用', `sort_num` int(11) unsigned not null default '0' comment '排序值', primary key (`id`), key `idx_role` (`status`)) engine=innodb default chart=utf8mb4 comment='角色表';
(4):role_permission(角色权限关联表)
drop table if exists `###role_permission`;create table `###role_permission` ( `id` int(11) unsigned not null auto_increment, `role_id` int(11) unsigned not null default '0' comment '角色编号', `permission_id` int(11) unsigned not null default '0' comment '权限编号', primary key (`id`)) engine=innodb default chart=utf8mb4 comment='角色权限对应表';
(5):ur(用户表)
drop table if exists `###ur`;create table `###ur` ( `id` int(11无锡城市职业技术学院) unsigned not null auto_increment, `ur_name` varchar(50) not null default '' comment '用户名', `password` varchar(64) not null default '' comment '用户密码', `mobile` varchar(20) not null default '' comment '手机号码', `last_login_time` int(10) unsigned not null default '0' comment '最后一次登录时间', `status` smallint(4) unsigned not null default '0' comment '状态0禁用1正常', `create_time` int(10) unsigned not null default '0' comment '账号创建时间', `update_time` int(10) unsigned not null default '0' comment '信息更新时间', primary key (`id`), key `id民航和国航的区别x_ur` (`ur_name`,`mobile`,`status`)) engine=innodb default chart=utf8mb4 comment='用户表';
(6):ur_role(用户角色关联表)
drop table if exists `###ur_role`;create table `###ur_role` ( `id` int(11) unsigned not null auto_increment, `ur_id` int(11) unsigned not null default '0' comment '用户id', `role_id` int(11) unsigned not null default '0' comment '角色id', primary key (`id`)) engine=innodb default chart=utf8mb4 comment='用户角色对应关系';
2:rbac的相关操作
(1)创建权限分组
//实例化rbac$rbac = new rbac();//创建权限分组$rbac->savepermissioncategory([ 'name' => '用户管理组', 'description' => '网站用户的管理', 'status' => 1]);
当savepermissioncategory方法中包含了主键id时为编辑权限分组
(2)创建权限节点
//实例化rbac$rbac = new rbac();//创建权限节点$rbac->createpermission([ 'name' => '文章列表查询', 'description' => '文章列表查询', 'status' => 1, 'type' => 1,//type为权限类型1为后端权限2为前端权限 'category_id' => 1,//权限分组的id 'path' => 'article/content/list',]);
当createpermission方法中包含了主键id时为编辑权限节点
(3)创建角色&给角色分配权限
//实例化rbac$rbac = new rbac();//创建角色&给角色分配权限$rbac->createrole([ 'name' => '内容管理员', 'descript小孩不笨观后感ion' => '负责网站内容管理', 'status' => 1], '1,2,3');
当createrole方法的第一个参数中包含了主键id时为编辑角色,第二个参数为权限节点的id拼接的字符串
(4)给用户分配角色
//实例化rbac$rbac = new rbac();//给用户分配角色$rba风车歌词c->assignurrole(1, [1]);
第一个参数为用户id,第二个参数为角色id的数组,此方法会先删除用户之前分配的角色,然后重新给用户分配角色
(5)获取权限分组列表
//实例化rbac$rbac = new rbac();//获取权限分组列表$rbac->getpermissioncategory([['status', '=', 1]]);//参数为权限分组表的条件
(6)获取权限列表
//实例化rbac$rbac = new rbac();//获取权限列表$rbac->getpermission([['status', '=', 1]]);//参数为权限表条件
(7)获取角色列表
//实例化rbac$rbac = ne非主流名称w rbac();//获取角色列表$rbac->getrole([], true);
第一个参数为role表的条件,第二个参数为true时查询角色分配的所有权限id
(8)删除权限相关方法
删除权限分组$rbac->delpermissioncategory([1,2,3,4]);删除权限$rbac->delpermission([1,2,3,4]);删除角色$rbac->delrole([1,2,3,4]);
(9)权限验证
[1]rvice方式
rvice方式因为要用到ssion一般要依赖于cookie,在用户登录后获取用户权限并将用户权限进行缓存
$rbac->cachepermission(1);//参数为登录用户的ur_id,返回值为用户权限列表
验证,判断用户对于指定的节点是否具有权限:
$rbac->can('article/channel/list');
[2]jwt方式
jwt方式在前后端分离结构用的比较普遍。在用户登录后需要获取token,将下面方法获取到的token传递到前端
$rbac->generatetoken(1);//第一个参数为登录的用户id,第二个参数为token有效期默认为7200秒,第三个参数为token前缀 返回结果为
返回值示例如下:
array(3) { ["token"] => string(32) "4c56b80f06d3d8810b97db33a1291694" ["refresh_token"] => string(32) "17914241bde6bfc46b20e643b2c58279" ["expire"] => int(7200)}
使用refresh_token刷新权限,有效期内使用refresh_token来刷新授权
$rbac->refreshtoken('17914241bde6bfc46b20e643b2c58279');
验证,前端将token传递到后端,后端校验用户是否具有指定节点权限
$rbac->can('article/channel/list');
总结
以上所述是www.887551.com给大家介绍的thinkphp5使用rabc实现权限管理,希望对大家有所帮助
本文发布于:2023-04-07 15:59:23,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/2cf7e12eff854f27a7fba0785c217317.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:thinkPHP5使用Rabc实现权限管理.doc
本文 PDF 下载地址:thinkPHP5使用Rabc实现权限管理.pdf
留言与评论(共有 0 条评论) |