码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 权限系统的设计


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


    目录

    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,实现业务流程的自动化。

  • 相关阅读:
    Spring Ioc源码分析系列--容器实例化Bean的四种方法
    03. Springboot集成Mybatis-flex(一)
    基于单片机的高精度超声波测距系统研究
    零基础学Java(13)方法参数
    2002~2018PJM每小时功率消耗文本数据集(145366行数据,具有明显的季节特性,单位为MW,含LSTM预测程序)
    对连续性变量进行LASSO回归分析 cox
    通过输入命令,在命令行中运行powershell
    MySQL高级学习笔记
    Go-函数作为参数传递
    元宇宙是否为噱头?若不是,什么是元宇宙?他的概念、技术、应用和影响是什么?
  • 原文地址:https://blog.csdn.net/zjshuster/article/details/125852763
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号