权限系统的设计

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


目录

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数据转换为多颗树(每个业务类型对应一棵树),参考
    private List<PermissionNode> fillChildrens(List<PermissionNode> permissionNodes, long parentPermissionId) {
            List<PermissionNode> currentPermissions = permissionNodes.stream()
                    .filter(p -> parentPermissionId == p.getParentPermissionId())
                    .collect(Collectors.toList());
            List<PermissionNode> resultPermissions = new ArrayList<>();
            for (PermissionNode permissionNode : currentPermissions) {
                long currentParentPermissionId = permissionNode.getPermissionId();
                List<PermissionNode> childrenPermissions = fillChildrens(permissionNodes, currentParentPermissionId);
                resultPermissions.add(PermissionNode.newBuilder(permissionNode)
                        .addAllChildren(childrenPermissions.stream()
                                .sorted(Comparator.comparing(PermissionNode::getPermissionId)).collect(Collectors.toList()))
                        .build());
            }
            return resultPermissions;
        }
  • 展示所有角色拥有的权限
  • 展示特定角色拥有的权限
  • 更新角色拥有的权限(全量更新接口,会删除老的权限)

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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值