guard 权限

# 设置角色和权限点

你可以在 src/store/modules/user.js 中 getUserInfo 的时候对角色(role)和权限点(permission)进行设置


# 权限使用

rbac 文档 (opens new window)

一个完整的权限判断对象

/* 旧版本 */
{
  "role": ["admin", "editor"],
  "ability": ["READ", "WRITE"],
  "mode": "oneOf" | "allOf" | "except"
}
/* 2021年9月后新版本 */
{
  "role": ["Admin", "Editor"],
  "permission ": ["read:system","write:system","delete:system"],
  "mode": "oneOf" | "allOf" | "except"
}
allOf: 数组内所有角色都拥有,返回True
oneOf: 数组内拥有任一角色,返回True(等价第1种数据)
except: 不拥有数组内任一角色,返回True(取反)

我们依旧保留了 v-permissions 自定义指令,如果你想简单的使用,直接输入一个字符串数组即可,默认使用 role 角色判断,oneOf 模式

v-permissions="['admin']" // 旧版
<br />
v-permissions="['Admin']" // 2021年9月后新版本

等价于

v-permissions="{ role: ['admin'], mode: 'oneOf'}" // 旧版
<br />
v-permissions="{ role: ['Admin'], mode: 'oneOf'}" // 2021年9月后新版本

如果你想使用更多的功能,比如使用权限点 ability(新版 ability 改名为 permission) 控制,输入完整的对象即可,以下输入皆可行

v-permissions="{ role: ['admin'] }" // 旧版
<br />
v-permissions="{ ability: ['WRITE'] }" // 旧版
<br />
v-permissions="{ role: ['editor'], ability: ['READ'], mode: 'allOf' }" // 旧版
<br />
v-permissions="{ role: ['Admin'] }" // 2021年9月后新版本
<br />
v-permissions="{ permission: ['delete:system'] }" // 2021年9月后新版本
<br />
v-permissions="{ role: ['Admin'], permission: ['delete:system'], mode: 'allOf'}"
// 2021年9月后新版本
<br />

mode 模式不输入默认是 oneOf


# 页面权限

注意事项:Pro 版本的角色权限控制字段为roles,路由会与userInfo接口返回的roles进行匹配和过滤,当路由模式为all模式时,你可以完全后端处理路由以及页面,那么你可以将src/config/settings.js中的rolesControl设置为false

{
  "meta": {
    "roles": ["admin"], //旧版本
    "guard": ["Admin"] //2021年9月后新版本
  }
}

也可以更细粒度的设置,根据个人需求设置

{
  "meta": {
    "roles": { "role": ["editor"], "ability": ["READ"], "mode": "allOf" }, //旧版本
    "guard": { "role": ["Admin", "Editor"], "mode": "allOf" } //2021年9月后新版本
  }
}