# 权限介绍

  • GET 请求是默认不经过权限控制,如果需要验证权限

    • 需要在方法注释中加入 @CatchAuth 标识
  • 超级管理员不经过权限控制,后台默认安装的用户

# 数据权限

关于数据权限的概念,很简单,就是要标记数据的所有者。所以

如果你需要数据权限的时候,那么表结构需要默认的 creator_id字段,用来标记数据的所有者。

一旦使用了数据权限,那么可以使用CatchRequest,使用它可以无缝获取creator_id,这是无感知的。 当你使用:

$request->param() 
or 
$request->post()

就可以轻松获取到。

# 使用

CatchAdmin 封装了可用 trait 来帮助开发者处理数据权限数据,引入 trait

use catchAdmin\permissions\model\DataRangScopeTrait

模型中使用 dataRange 方法,该方法接受一个 roles 对象数组,如果不传,则获取当前登录用户的角色组。

以用户列表为例

$this->dataRange()
    ->withoutField(['updated_at'], true)
    ->catchSearch()
    ->catchLeftJoin(Department::class, 'id', 'department_id', ['department_name'])
    ->order($this->aliasField('id'), 'desc')
    ->paginate();

TIP

dataRange 因为它不是Query 方法,所以它必须放在最前面。而又因为它返回Query 对象,所以它可以正常使用 Query 的方法。

数据权限并没有提供全局的方法,所以可以在你需要权限管理的地方引入它。

# 按钮权限

# 基于角色

每次新增角色需要有一个唯一标识,角色的按钮权限就是基于这个唯一标识。 在需要使用的页面引入

import { permission } from '@/directive/permission/index.js' // 权限判断指令
export default{
  directives: { permission }
}

在需要判断的按钮上加上

<el-tag v-permission="['editor']">editor</el-tag>

# 基于Action

每个菜单的 Action,也就是按钮都有一个权限标识,以@分割的。Action 的判断就是基于这个。 在需要使用的页面引入

import { action } from '@/directive/permission/index.js' // 权限判断指令
export default{
  directives: { permission }
}

在需要判断的按钮上加上

<el-tag v-action="'job@delete'">删除</el-tag>

或者

<el-tag v-action="'job.delete'">删除</el-tag>

如果模块之间有重复的 Action,那么就需要添加 module 名称来识别了。

<el-tag v-action="'permissions@job@delete'">删除</el-tag>

或者

<el-tag v-action="'permissions.job.delete'">删除</el-tag>