think-rbac for thinkphp6.0
之前做了一个thinkphp5.1版本的rbac接口管理,最近开始使用thinkphp6.0了,所以就可以开始升级我的rbac啦,哈哈哈
使用
- 首先用composer安装
1
| composer require lihq1403/think-rbac:^1.0
|
- 发布配置文件
1
| php think lihq1403:rbac-publish
|
会生成一个rbac.php的配置文件在config目录下
- rbac数据库迁移
1
| php think lihq1403:rbac-migrate
|
然后就会发现数据库多了5张表,表字段具体内容可看代码
1 2 3 4 5 6
| rbac_role 角色 表 rbac_user_role 用户角色 中间表 rbac_permission_group 权限组 表 rbac_permission 权限规则 表 rbac_role_permission_group 角色权限组 中间表 rbac_log 请求日志 表
|
- thinkphp6里面使用
在你需要用到权限的用户model里面,引入RBACUser
,参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?php
namespace app\common\models;
use Lihq1403\ThinkRbac\traits\RBACUser;
class AdminUser extends BaseModel {
const SUPER_ADMINISTRATOR_ID = 1;
use RBACUser; }
|
- 配合路由使用
如果不想使用的话,可以参考Lihq1403\ThinkRbac\controller\RBACController
做自己的自定义方法
路由参考如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| // rbac 管理 Route::group('rbac', function () {
// 角色管理 Route::post('role', 'Lihq1403\ThinkRbac\controller\RBACController@addRole'); // 添加角色 Route::put('role', 'Lihq1403\ThinkRbac\controller\RBACController@editRole'); // 修改角色 Route::delete('role', 'Lihq1403\ThinkRbac\controller\RBACController@delRole'); // 删除角色 Route::get('roles', 'Lihq1403\ThinkRbac\controller\RBACController@getRoles'); // 角色列表 Route::get('role/permission-group', 'Lihq1403\ThinkRbac\controller\RBACController@roleHoldPermissionGroup'); // 角色拥有的权限列表 Route::post('role/change-permission-group', 'Lihq1403\ThinkRbac\controller\RBACController@diffPermissionGroup'); // 角色更换的权限列表
// 权限组管理 Route::post('permission_group', 'Lihq1403\ThinkRbac\controller\RBACController@addPermissionGroup'); // 权限组新增 Route::put('permission_group', 'Lihq1403\ThinkRbac\controller\RBACController@editPermissionGroup'); // 权限组编辑 Route::delete('permission_group', 'Lihq1403\ThinkRbac\controller\RBACController@delPermissionGroup');// 权限组删除 Route::get('permission_groups', 'Lihq1403\ThinkRbac\controller\RBACController@getPermissionGroups'); // 权限组列表
// 权限管理 Route::post('permission', 'Lihq1403\ThinkRbac\controller\RBACController@addPermission'); // 权限新增 Route::put('permission', 'Lihq1403\ThinkRbac\controller\RBACController@editPermission'); // 权限编辑 Route::delete('permission', 'Lihq1403\ThinkRbac\controller\RBACController@delPermission'); // 权限删除 Route::get('permissions', 'Lihq1403\ThinkRbac\controller\RBACController@getPermissions'); // 权限列表
// 管理员管理 Route::post('admin-user/role', 'Lihq1403\ThinkRbac\controller\RBACController@userAssignRoles'); // 给管理员分配角色 Route::delete('admin-user/role', 'Lihq1403\ThinkRbac\controller\RBACController@userCancelRoles'); // 给管理员删除角色 Route::post('admin-user/sync-role', 'Lihq1403\ThinkRbac\controller\RBACController@userSyncRoles'); // 同步管理员角色
// 日志管理 Route::get('logs', 'Lihq1403\ThinkRbac\controller\RBACController@getLog'); // 获取日志 });
|
- 配合中间件进行权限验证
参考中间件如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <?php
namespace app\middleware;
use app\common\facades\AdminAuth; use app\common\models\AdminUser; use Lihq1403\ThinkRbac\exception\ForbiddenException; use Lihq1403\ThinkRbac\facade\RBAC; use think\Request;
class AdminUserRbac {
public function handle(Request $request, \Closure $next) { $uid = AdminAuth::uid();
if ($uid !== AdminUser::SUPER_ADMINISTRATOR_ID) { try { RBAC::can($uid); } catch (\Lihq1403\ThinkRbac\exception\ForbiddenException $exception){ throw new ForbiddenException($exception->getMessage()); } }
RBAC::log($uid);
return $next($request); } }
|
- 生成规则
在config/rbac.php里面,会有两个数组,用于权限初始化,permission_group_list
和permission_list
对自己的系统进行权限配置之后,刷新权限规则
1
| php think lihq1403:rbac-refresh -f yes
|
常用API
实例化
1 2 3
| $rbac = new Rbac();
\Lihq1403\ThinkRbac\facade\RBAC::action();
|
具体方法
请参考Lihq1403\ThinkRbac\lib\RBACLib
和Lihq1403\ThinkRbac\Rbac
源码地址