原子授权

2018-11-29 09:24:46

原子授权

原子授权主要解决这类问题:能对哪个范围内原子数据执行什么操作

授权内容

针对原子类型原子指令授权,如以下授权记录:

角色 原子类型 原子指令
superuser todo create

资源范围

在授权时可以指定权限的资源范围,如以下授权记录

角色 原子类型 原子指令 资源范围
superuser todo read 财务部

角色superuser仅能读取财务部todo数据

授权途径

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

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

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

async addRoleRight({ roleId, atomClassId, action, scope })
名称 说明
roleId 需要被授权的角色Id
atomClassId 原子类型Id
action 需要授权的指令code
scope 资源范围

scope支持以下值:

  • 0: 操作自己创建的原子数据
  • roleId: 操作roleId及以下所有子角色的用户创建的原子数据
  • roleIds: roleId数组

授权判断一览表

由于原子提供了许多特性,草稿简单流程公开访问等状态都会影响对原子授权的判断

原子不同状态对应的授权判断清单如下

指令 草稿 简单流程 公开访问 正常
create - - - -
read 只有创建人有权限 判断是否有其他指令的授权,比如有write权限必然有read权限 不需判断 需判断
write、delete 只有创建人有权限 需判断 - 需判断
扩展指令 - 需判断 - 需判断
  • -: 不支持
  • create: 只需对原子类型授权,与原子的状态无关

草稿

原子有两个状态:草稿正常

草稿状态下,只有创建人自己可以执行修改删除指令

正常状态下,只有拥有授权的用户才可以执行相应授权的指令

公开访问

默认情况下,原子只有被授予了权限才可以被查询到。Cabloy同样也支持不授予权限而直接公开访问,只需将原子类型的public属性设为1即可

简单流程

Cabloy目前实现了原子的简单流程处理。比如实现这个流程:当执行指令review之后,原子才可以公开访问,从而实现CMS中的文章发表功能

授权判断

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

中间件判断

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

a-base/backend/src/routes.js

{ method: 'post', path: 'atom/create', controller: atom, middlewares: 'transaction',
  meta: { right: { type: 'atom', action: 1 } },
},
名称 说明
right 全局中间件right,默认处于开启状态,只需配置参数即可
type atom: 判断原子授权
action 原子指令代码

Api判断

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

指令create

async checkRightCreate({ atomClass: { id, module, atomClassName, atomClassIdParent = 0 }, user })

指令read

async checkRightRead({ atom: { id }, user })

指令write、delete

async checkRightUpdate({ atom: { id, action }, user })

扩展指令

async checkRightAction({ atom: { id, action }, user })


评论: