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

  • 相关阅读:
    Linux常用命令操作
    MySQL 中索引是如何实现的,有哪些类型的索引,如何进行优化索引
    一个爬虫自动化数据采集的故事~
    用进程和线程完成TCP进行通信操作及广播和组播的通信
    一文带你简单了解一下堡垒机是干嘛的!
    ADO.NET组件学习笔记
    1、拓扑排序 2、逆拓扑 3、i到j之间长度为k的路径 4、i到j之间包含顶点x的路径是否存在 5、如果边是带权的,求解 i 到 j 之间长度最长的路径
    Ubuntu 搜狗输入法无法输入中文解决方案(不需要重装,不需要重启服务器)
    Pandas中的宝藏函数-map
    手动下载的jar包依赖了其他jar包,一个个找太麻烦,看我是怎么解决的
  • 原文地址:https://blog.csdn.net/zjshuster/article/details/125852763
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号