功能授权

功能授权主要解决这类问题:能访问后端的哪个功能

一个功能可对应一组后端API路由

菜单功能的特例

授权途径

授权途径有三种:人工授权初始授权测试授权

这里重点说明CabloyJS为初始授权测试授权提供的API方法

addRoleFunction

a-base/backend/src/config/middleware/adapter/role.js

async addRoleFunction({ roleId, functionId, roleRightId = 0 })
名称 说明
roleId 需要被授权的角色Id
functionId 功能Id
roleRightId 如果是原子指令菜单,那么这里就保存原子指令的授权记录Id

addRoleFunctionBatch

a-base/backend/src/config/middleware/adapter/role.js

// const roleFunctions = [
//   { roleName: 'root', name: 'listComment' },
// ];
async addRoleFunctionBatch({ module, roleFunctions })
名称 说明
module 模块名称,如果为空就使用当前模块名称
roleFunctions 授权记录数组

举例

src/module/test-party/backend/src/service/version.js

// roleFunctions
const roleFunctions = [
  { roleName: 'root', name: 'kitchenSink' },
];
await this.ctx.meta.role.addRoleFunctionBatch({ roleFunctions });

原子指令菜单

有两个特别的菜单类型:新建原子原子列表,其权限是与原子权限相关联的。比如,当我们配置了partycreateread原子权限,那么新建party和查看party列表这两个菜单项就会被自动赋予授权

授权判断

可以通过中间件Api进行授权的判断

中间件判断

CabloyJS使用全局中间件right封装了授权判断的逻辑,只需在后端路由上配置相应的中间件参数即可

src/module/test-party/backend/src/routes.js

{ method: 'post', path: 'kitchen-sink/guide/echo9', controller: testKitchensinkGuide,
  meta: {
    right: {
      type: 'function',
      name: 'kitchenSink',
    },
  },
},
名称 说明
right 全局中间件right,默认处于开启状态,只需配置参数即可
type 授权类型,这里是功能授权
name 需要进行授权验证的功能名称

Api判断

src/module/test-party/backend/src/controller/test/function/public.js

// check right function
const pass = await this.ctx.meta.function.checkRightFunction({
  function: {
    module: 'test-party',
    name: 'testFunctionPublic',
  },
  user: userTom,
});
assert.equal(!!pass, true);