cabloy-pro icon indicating copy to clipboard operation
cabloy-pro copied to clipboard

Detail新方案

Open zhennann opened this issue 2 years ago • 0 comments

Discussed in https://github.com/zhennann/cabloy/discussions/35

Originally posted by zhennann April 23, 2023

背景

  • 原有方案:通过a-detail模块来实现明细表的管理
  • 新方案:由于已经实现了ItemOnly机制,那么可以在ItemOnly机制之上实现新的detail方案

益处

  • 简化代码,简化概念
  • 简化二次开发
  • detail可以直接延用atom的功能,从而支持更丰富的功能特性

概念辨析

  1. Detail其实是一个更广泛的概念。比如,角色的授权:授权记录表就是角色的明细表。因此,Detail的新方案具有更广泛的适用性,也就意味着开发新功能可以节省可观的代码量

设计细节

  1. 明细的meta:需要指定atomClassMain(是谁的明细)
  2. 明细表要存储atomIdMain字段,方便进行权限判断
    • 在存入atomIdMain值时,字段名可以配置为别的字段名称
  3. 如果按照不同的宿主来管理,那么就需要不同的明细atomClass,但是可以共用数据表
    • 比如:comment表,既可以基于文章来管理,也可以基于用户来管理。二者的权限机制是不同的,因此需要分开atomClass
    • 比如:基于角色的数据权限记录:既可以基于角色来查询,也可以基于用户来查询。那么,就需要分别实现两个明细atomClass,其atomClassMain分别是角色、用户

权限机制

  1. 权限分两层:
    • 第一层:继承自宿主的某个action权限,比如,拥有了角色的授权指令的权限,就可以在授权明细页面进行CRUD。如果没有指定rightInherit配置,则忽略本层权限控制,比如spreadsBulk指令
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,这样可以对明细条目进行进一步的范围权限控制
  1. 权限配置:
    • 如果meta.enableRight为false,只需判断rightInherit,因此直接从meta中收集可用指令集合
    • 如果设置了meta.enableRight,那么就需要把授权记录存入数据库,因此是从数据库收集可用指令集合

zhennann avatar Jul 12 '23 01:07 zhennann