• 权限系统的设计


    权限系统与其附带的权限审核控制是中大型企业必可少的,本文从权限系统的基本实现和如何接入审核两个维度来探讨。


    目录

    1:权限系统的设计

          1.1 不同权限的关系、存储与展示

          db表设计

          1.2 角色划分与对应的权限变更

     角色表

    2: 权限系统接入审核

           1.1 公司组织架构以及业务组织架构对审核的影响

           1.2 审核流结束后对申请者权限结构的自动更新


    1:权限系统的设计

          1.1 不同权限的关系、存储与展示

             常见权限系统中不同权限之间一般是父子关系,即申请A权限之前一定需要申请B权限。一个权限节点可能有多个子权限节点,也可能有多个父亲。对于用户来说,每个user自身拥有的权限也需要记录。

          db表设计

    权限表:permission_id是主键,每种权限必须具备描述、类别、父节点、创建人、是否生效、修改人这些信息 。       

     

     

          1.2 角色划分与对应的权限变更

     对于比较复杂的系统,可以设置管理员权限、操作员权限、访客权限,每个权限初始化一些自身拥有的权限 ,如果需要申请新的权限可以去审核平台申请     

           角色表

    角色表需要有主键、该角色的姓名、角色类型、关联的权限id、创建时间与更新时间这些信息

     一些关键接口

    • 新增权限节点
    • 更新权限节点
    • 删除权限节点
    • 展示权限层级树 (将list类型的db数据转换为多颗树(每个业务类型对应一棵树),参考
      1. private List fillChildrens(List permissionNodes, long parentPermissionId) {
      2. List currentPermissions = permissionNodes.stream()
      3. .filter(p -> parentPermissionId == p.getParentPermissionId())
      4. .collect(Collectors.toList());
      5. List resultPermissions = new ArrayList<>();
      6. for (PermissionNode permissionNode : currentPermissions) {
      7. long currentParentPermissionId = permissionNode.getPermissionId();
      8. List childrenPermissions = fillChildrens(permissionNodes, currentParentPermissionId);
      9. resultPermissions.add(PermissionNode.newBuilder(permissionNode)
      10. .addAllChildren(childrenPermissions.stream()
      11. .sorted(Comparator.comparing(PermissionNode::getPermissionId)).collect(Collectors.toList()))
      12. .build());
      13. }
      14. return resultPermissions;
      15. }
    • 展示所有角色拥有的权限
    • 展示特定角色拥有的权限
    • 更新角色拥有的权限(全量更新接口,会删除老的权限)

    2: 权限系统接入审核

           1.1 公司组织架构以及业务组织架构对审核的影响

              一般而言,公司内部审核分为行政管理类和业务维护类;前一种可以直接根据公司组织架构生成审批流,后一种可以更具当前业务的维护人员熟悉程度动态生成审批流。

              审核表

    nametypedescription
    audit_idint primary key
    permission_idintpermission id
    typeintaudit type
    requester_namevarcharrequester_name
    reviewersvarchararray of reviewers
    reasonvarcharreason

           1.2 审核流结束后对申请者权限结构的自动更新

              开权限类型的审批审核完成后,往往是修改申请者关联的权限表中的某个字段,这种比较简单。如果是审批完成后需要执行某个耗时长或者复杂的操作,这时作为审核业务的owner需要设计开放api,让审核业务的请求方填写业务回调地址与参数列表,可以在审核流程结束后,以http接口或者消息队列的方式call back,实现业务流程的自动化。

  • 相关阅读:
    关于unity中 编辑器相关逻辑的记录
    Leetcode_203.移除链表元素—C语言
    虚幻引擎5:增强输入的使用方法
    使用vue-cli搭建SPA项目
    谷粒商城 renren-fast pom文件报红
    Cookie与Session
    2022年ccpc桂林站
    激活函数作用以及 sigmoid和softmax
    c++模板
    深入理解计算机系统——第四章 Processor Architecture
  • 原文地址:https://blog.csdn.net/zjshuster/article/details/125852763