资源授权
资源授权
主要解决这类问题:谁
能访问后端的哪个资源
- 授权策略
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
- 1const VersionTestFn = require('./version/test.js');
- 2
- 3async test() {
- 4 const versionTest = new (VersionTestFn(this.ctx))();
- 5 await versionTest.run();
- 6}
授权API
- addResourceRole
src/module-system/a-base-sync/backend/src/bean/bean.resource.js
- 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{ method: 'post', path: 'kitchen-sink/guide/echo9', controller: 'testKitchensinkGuide',
- 2 meta: {
- 3 right: {
- 4 type: 'resource',
- 5 // module: 'test-party',
- 6 name: 'kitchenSink',
- 7 // atomStaticKey: 'test-party:kitchenSink',
- 8 },
- 9 },
- 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: 单独判断
- 1async checkRightResource({ resourceAtomId, atomStaticKey, user })
名称 | 说明 |
---|---|
resourceAtomId | 资源的原子Id |
atomStaticKey | 资源的atomStaticKey ,据此得到资源的原子Id |
user | 用户 |
- check: 批量判断
- 1async check({ atomStaticKeys, user })
名称 | 说明 |
---|---|
atomStaticKeys | 资源的atomStaticKey 数组 |
user | 用户 |
评论: