数据权限校验实践

数据权限控制实践

最近在实习中为公司项目完成一个文件数据权限校验代码的转换重构,写这篇博客来记录前后两种权限校验的实现方案与相关概念

原实现方案:RBAC-基于角色的访问控制

RBAC(Role-Based Access Control)

RBAC 是一种常见的访问控制模型,它通过角色来分配权限。在 RBAC 模型中,角色是一组权限的集合,用户通过被分配角色来获得相应的权限。RBAC 的主要特点包括:

  • 角色分配:用户被分配一个或多个角色,每个角色包含一组权限。
  • 集中管理:权限管理更加集中和简化,因为只需要管理角色和权限的关系,而不是每个用户的权限。
  • 易于审计:由于权限是通过角色间接分配给用户的,因此更容易跟踪和审计权限的使用情况。

具体实现

  • 先固定化一张权限表permission记录有哪些权限
  • 再通过permission_func,permission_data两张表分别记录操作权限和数据权限
  • 每个租户下有多个角色,由表role来记录,
  • 每个角色拥有不同的权限,于是通过pression_func,pression_data记录roleid和权限 id的集合
  • 此时通过三张权限表已经可以明确什么角色有什么权限
  • 进入实际业务场景,角色查看流程包权限拥有个人,部门,全部可见三种权限范围
  • 每次查表需要取出角色的该权限设置,依据不同级别做不同处理:
    • 如果是个人,根据userId=creator查数据
    • 部门,由当前部门id查出所有子部门deptIds,然后根据deptIds筛选流程包
    • 全部,走全查

开发代码中是先查权限,根据权限确定可见范围

新方案:ABAC-基于属性的访问控制

ABAC(Role-Based Access Control)

ABAC 是一种更加灵活和动态的访问控制模型,它基于属性(如用户属性、资源属性、环境属性等)来控制访问权限。在 ABAC 模型中,访问决策是基于一组属性和策略来动态计算的。ABAC 的主要特点包括:

  • 属性驱动:访问决策基于用户、资源和环境的属性。
  • 动态决策:访问权限可以根据属性的变化动态调整,提供更细粒度的控制。
  • 细粒度控制:可以对单个资源或操作进行精确的访问控制。
  • 流程包新增字段–>可见范围:开发者可见,部门可见,全部可见(2,4,6)
  • 此处根据角色权限进行判断,
  • 如果是超管,默认看到所有流程包,直接查全部
  • 普通用户则需要分成三个步骤来查
  • 1.根据viewScope=2&&userid=creator查出开发者可见
  • 2.根据viewScope=4&&id in(deptIds)查出部门可见
  • 3,.根据viewScope=8查出全部可见
  • 合成一条查询sql

不用确定可见范围,直接在查询时根据提前定义的文件可见范围规则来查

权限控制完成了从 中心化的动态规则引擎去中心化的数据属性声明 的转移

总结

当然这个项目中的鉴权模块转换不是为了优化架构,而是用户提出的一个定制化需求,这两种鉴权方案其实都有各自的优势,需要根据业务场景来进行选择,以下列出这二者的优势场景

  • RBAC 提供了一种简单、集中的权限管理方式,适用于权限相对固定的场景。
  • ABAC 提供了一种灵活、动态的权限管理方式,适用于权限需求变化频繁的场景。

你可能感兴趣的:(数据库,前端,网络)