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