cabloy-pro
cabloy-pro copied to clipboard
Detail新方案
Discussed in https://github.com/zhennann/cabloy/discussions/35
Originally posted by zhennann April 23, 2023
背景
- 原有方案:通过a-detail模块来实现明细表的管理
- 新方案:由于已经实现了ItemOnly机制,那么可以在ItemOnly机制之上实现新的detail方案
益处
- 简化代码,简化概念
- 简化二次开发
- detail可以直接延用atom的功能,从而支持更丰富的功能特性
概念辨析
- Detail其实是一个更广泛的概念。比如,角色的授权:授权记录表就是角色的明细表。因此,Detail的新方案具有更广泛的适用性,也就意味着开发新功能可以节省可观的代码量
设计细节
- 明细的meta:需要指定atomClassMain(是谁的明细)
- 明细表要存储atomIdMain字段,方便进行权限判断
- 在存入atomIdMain值时,字段名可以配置为别的字段名称
- 如果按照不同的宿主来管理,那么就需要不同的明细atomClass,但是可以共用数据表
- 比如:comment表,既可以基于文章来管理,也可以基于用户来管理。二者的权限机制是不同的,因此需要分开atomClass
- 比如:基于角色的数据权限记录:既可以基于角色来查询,也可以基于用户来查询。那么,就需要分别实现两个明细atomClass,其atomClassMain分别是角色、用户
权限机制
- 权限分两层:
- 第一层:继承自宿主的某个action权限,比如,拥有了角色的授权指令的权限,就可以在授权明细页面进行CRUD。如果没有指定rightInherit配置,则忽略本层权限控制,比如
spreadsBulk指令
- 第一层:继承自宿主的某个action权限,比如,拥有了角色的授权指令的权限,就可以在授权明细页面进行CRUD。如果没有指定rightInherit配置,则忽略本层权限控制,比如
actions: {
create: {
rightInherit: 'atomAuthorizations',
createDelay: true,
},
read: {
rightInherit: 'atomAuthorizations',
},
spreadsBulk: {
code: 101,
title: 'RoleAtomRightSpread',
actionModule: 'a-baseadmin',
actionComponent: 'actionRoleRight',
icon: { f7: ':tools:spreadsheet' },
bulk: true,
select: false,
},
}
* 第二层:明细可以指定meta.enableRight,这样可以对明细条目进行进一步的范围权限控制
- 权限配置:
- 如果meta.enableRight为false,只需判断rightInherit,因此直接从meta中收集可用指令集合
- 如果设置了meta.enableRight,那么就需要把授权记录存入数据库,因此是从数据库收集可用指令集合