PHP code example of lihq1403 / think-rbac
1. Go to this page and download the library: Download lihq1403/think-rbac library . Choose the download type require .
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
lihq1403 / think-rbac example snippets
/**
* 用户表,这是我的示例,要改成你们自己的
* 用来做关联的,所以一定要有
*/
'user_model' => \app\common\models\AdminUser::class,
/**
* 是否忽略未定义的权限
*/
'skip_undefined_permission' => true,
/**
* 可以跳过权限验证的 模块-控制器-方法
*/
'continue_list' => [
'module' => ['admin'],
'controller' => ['test'],
'action' => ['test']
],
// 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'); // 获取日志
});
$rbac = new Rbac();
// 或者使用门面
\Lihq1403\ThinkRbac\facade\RBAC::addPermissionGroup();
$rbac->addPermissionGroup('用户管理', 'user_manager', '用户管理权限组');
$rbac->editPermission(1, ['name' => '用户列表111']);
$rbac->delPermission(1);
$rbac->addRole('用户管理的管理员', '描述');
$rbac->editRole(1, ['name' => '用户管理的管理员']);
$rbac->delRole(1);
$rbac->closeRole(2);
$rbac->getRoles($map = [], $field = [], $page = 1, $page_rows = 10);
返回结果是分页的
array(3) {
["page"] => int(1)
["total"] => int(1)
["list"] => array(1) {
[0] => array(6) {
["id"] => int(2)
["name"] => string(24) "用户管理的管理员"
["description"] => string(2) "11"
["create_time"] => string(19) "2019-06-27 14:02:34"
["update_time"] => string(19) "2019-06-27 14:02:34"
["status"] => int(0)
}
}
}
$rbac->roleHoldPermissionGroup(2);
返回结果
array(3) {
[0] => array(5) {
["id"] => int(4)
["name"] => string(12) "用户管理"
["description"] => string(21) "用户管理权限组"
["code"] => string(12) "user_manager"
["hold"] => int(0) // 1是 0否
}
[1] => array(5) {
["id"] => int(5)
["name"] => string(3) "111"
["description"] => string(0) ""
["code"] => string(2) "11"
["hold"] => int(0)
}
[2] => array(5) {
["id"] => int(6)
["name"] => string(12) "用户列表"
["description"] => string(0) ""
["code"] => string(2) "22"
["hold"] => int(1)
}
}
$rbac->assignPermissionGroup(2, 'user_manager');
第二个参数不填,则添加所有权限组
$rbac->cancelPermissionGroup(2,['user_manager']);
第二个参数不填,则收获所有权限组
$rbac->diffPermissionGroup(2, [22]);
$user = AdminUser::get(1);
$user->assignRoles([1,2,3]);
$user->cancelRoles([1,2,3]);
$user->diffRoles([1,2,3]);
$user->allRoles();
返回结果
array(1) {
[0] => array(3) {
["role_id"] => int(2)
["name"] => string(24) "用户管理的管理员"
["description"] => string(2) "11"
}
}
$rbac->can(1);
如果没有权限,会抛出Lihq1403\ThinkRbac\exception\ForbiddenException异常
/**
* rbac中间件
* @param Request $request
* @param \Closure $next
* @return mixed
* @throws ForbiddenException
*/
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);
}
$rbac->log(1);
传入用户id记录
$rbac->getLogList(1,10);
结果如下格式:
array(1) {
["page"] => int(1)
["total"] => int(1)
["list"] => array(1) {
[0] => array(8) {
["id"] => int(3)
["user_id"] => int(1)
["method"] => string(3) "GET"
["path"] => string(16) "api/admin/noAuth"
["ip"] => string(12) "192.168.56.1"
["input"] => object(stdClass)#255 (1) {
["hhh"] => string(1) "2"
}
["create_time"] => string(19) "2019-07-10 15:23:12"
["user"] => array(2) {
["id"] => int(1)
["username"] => string(5) "admin"
}
}
}
}
shell
$ php think lihq1403:rbac-publish
shell
$ php think lihq1403:rbac-migrate