RBAC权限(RBAC-business)

2020-11-05  by  

业务介绍

简易RBAC 权限业务组件,支持角色,权限,用户。和Symfony路由绑定关系,支持多平台,各个位置皆可使用。

源码地址

phpzlc/rbac-business

安装

composer require phpzlc/rbac-business

实战例子

可以在 demo-blogadmin-business 找到实战应用。

权限注册

  1. 路由注册

    admin_account:
      prefix: /account
      resource: 'account.yaml'
      options:
         platform: 平台
         permission_group: 权限分组
         permission_tag: 权限标识
         permission_description: 权限描述
    

    技巧

    路由配置的时候,上层的options设置的参数会在下层的所有路由中生效。

    如果两个路由共用一个权限,只要将permission_tag设置为一样即可。系统以第一次出现的配置参数为准,后面相同的权限其他参数可忽略。

    场景

    可以在入口方法处验证路由是否有访问权限,便捷鉴权。

       
    use App\Business\RBACBusiness\RBACBusiness;
       
    $this->rbac = new RBACBusiness($this->container, PlatformClass::getPlatform());
    
    $this->rbac->setIsSuper(CurAuthSubject::getCurUser()->getIsSuper());
       
    //对路由进行权限校验
    if(!$this->rbac->canRoute($this->get('request_stack')->getCurrentRequest()->get('_route'))){
        if(self::getReturnType() == SystemBaseController::RETURN_HIDE_RESOURCE){
            return Responses::error('权限不足');
        }else{
            return $this->render('@PHPZlcAdmin/page/no_permission.html.twig');
        }
    }
    
    //对菜单进行权限筛选
    $this->adminStrategy->setMenus($this->rbac->menusFilter($this->adminStrategy->getMenus()));
     
    
  2. 自由注册

    由于有些权限更为自由,和路由不是强绑定关系,就需要通过代码自由注册。

    书写位置: src/Business/RBACBusiness/PermissionBusiness.php

    *
    * @return array[]
    */
    public function getBuiltPermissions()
    {
        return [
            [
                'platform' => '平台',
                'permission_tag' => '权限标识',
                'permission_description' => '权限描述',
                'permission_group' => '权限分组',
                'routes' => [], //允许路由名
            ]
        ];
    }
    

权限写库和更新

  1. 第一次写库

    执行内置数据命令的时候一并安装

  2. 更新方法

     (new PermissionBusiness($this->container))->builtUpdatePermission();
    
  3. 安装admin-business组件的话可以点击页面上的清除缓存按钮更新。

页面效果展示

以下效果来自admin-business

  1. 角色与权限(首页)

    角色与权限(首页)

  2. 角色与权限(分配权限)

    角色与权限(首页)

  3. 账号和角色

    角色与权限(首页)

鉴权与核心方法

  1. 核心逻辑类

    文件路径:

    src/Business/RBACBusiness/RBACBusiness.php

    类命名空间

    use App\Business\RBACBusiness\RBACBusiness; 
    

    初始化

    new RBACBusiness($this->container, PlatformClass::getPlatform());
    
  2. 设置是否为超级管理员

    public function setIsSuper($isSuper)
    

    如果是超级管理员,则拥有全部权限。

  3. 判断是否有权限

    /**
     * 验证是否有权限
     *
     * @param $permissions //需要验证的权限标记,支持多个。可传数组或字符串。
     * @param string $model //匹配模式 or 或者 and
     * @param UserAuth|null $userAuth // 需要鉴权的用户,不传为当前登录用户
     * @return bool
     */
    public function can($permissions, $model = 'and', UserAuth $userAuth = null)
    
  4. 判断是否有访问路由的权限

    /**
     * 验证路由是否有权限访问
     * 
     * @param $route //  路由名
     * @param UserAuth|null $userAuth //需要鉴权的用户,不传为当前登录用户
     * @return bool
     */
    public function canRoute($route, UserAuth $userAuth = null)
    
  5. 清除用户权限菜单缓存

    /**
     * 清除缓存
     *
     * @param UserAuth|null $userAuth //需要鉴权的用户,不传为当前登录用户
     */
    public function clearCache(UserAuth $userAuth = null)
    

在页面中鉴权

角色与权限(首页)

找到错别字了?本文档有什么问题么?分叉并编辑 它 !

CJayhe

谢谢您的赞赏~

使用微信扫描二维码完成支付