资源授权

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

- 授权策略

CabloyJS采用白名单策略,所有角色的授权都必须显式设置(superuser也不例外)

- 授权内容

针对资源的授权,如以下授权记录:

|角色|资源| |–|–|–| |system|test-party:kitchenSink|

通过原子的atomStaticKey引用资源,如这里的test-party:kitchenSink

授权途径

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

- 人工授权

如果某些权限只有在实际部署或运行时才能决定,可通过管理界面进行授权操作

- 初始授权

  • 旧方案(仍有有效):如果需要在系统运行时,预先初始化权限,可以在Bean组件version.manager的方法init中通过代码分配权限

  • 新方案:由于CabloyJS4.0引入了静态原子的概念,可以直接在静态资源的定义中指定角色名,系统自动进行授权。参见:静态资源

- 测试授权

为了测试与开发的便利,还可以在开发阶段预先初始化权限,可以在Bean组件version.manager的方法test中通过代码分配权限。比如,给某些测试角色分配权限

测试授权仅在测试环境开发环境有效

src/suite-vendor/test-party/modules/test-party/backend/src/bean/version.manager.js

  1. 1const VersionTestFn = require('./version/test.js');
  2. 2
  3. 3async test() {
  4. 4 const versionTest = new (VersionTestFn(this.ctx))();
  5. 5 await versionTest.run();
  6. 6}

授权API

- addResourceRole

src/module-system/a-base-sync/backend/src/bean/bean.resource.js

  1. 1async addResourceRole({ atomId, atomStaticKey, roleId })
名称 说明
atomId 资源的原子Id
atomStaticKey 资源的atomStaticKey,据此得到资源的原子Id
roleId 角色Id

授权判断方式

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

- 中间件判断

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

src/suite-vendor/test-party/modules/test-party/backend/src/routes.js

  1. 1{ method: 'post', path: 'kitchen-sink/guide/echo9', controller: 'testKitchensinkGuide',
  2. 2 meta: {
  3. 3 right: {
  4. 4 type: 'resource',
  5. 5 // module: 'test-party',
  6. 6 name: 'kitchenSink',
  7. 7 // atomStaticKey: 'test-party:kitchenSink',
  8. 8 },
  9. 9 },
  10. 10},
名称 说明
right 全局中间件right,默认处于开启状态,只需配置参数即可
type 授权类型,这里是资源授权
module + name / atomStaticKey 引用资源
  • module+name: 一般而言,name就是在静态资源中指定的atomStaticKey,如果是在模块内部引用,就可以忽略module,如果是跨模块引用,就必须指定module

- Api判断

使用全局bean组件resource进行api判断:ctx.bean.resource

src/module-system/a-base-sync/backend/src/bean/bean.resource.js

  • checkRightResource: 单独判断
  1. 1async checkRightResource({ resourceAtomId, atomStaticKey, user })
名称 说明
resourceAtomId 资源的原子Id
atomStaticKey 资源的atomStaticKey,据此得到资源的原子Id
user 用户
  • check: 批量判断
  1. 1async check({ atomStaticKeys, user })
名称 说明
atomStaticKeys 资源的atomStaticKey数组
user 用户