当前位置: 主页 > 数据库

数据库权限管理设计-权限数据库表设计

发布时间:2023-02-13 11:15   浏览次数:次   作者:佚名

点击上面的“芋头源代码”,选择“”

做一个积极的人,而不是一个积极的废人!

源码精品专栏

来源:cnblogs.com/iceblow/p/11121362.html

前言

权限管理是所有后台系统的重要组成部分。 主要目的是控制不同人访问资源的权限,避免权限控制缺失或操作不当导致的风险问题,如操作失误、隐私数据泄露等问题。目前我负责权限在公司,所以对权限的设计很熟悉。 公司采用微服务架构,权限体系天然独立。 其他业务系统包括商品中心、订单中心、用户中心、仓库系统、小程序等。 , 十几个系统和终端包括多个APP

1.权限模型

数据权限 设计_权限数据库表设计_数据库权限管理设计

目前最流行的权限设计模型是RBAC模型,基于角色的访问控制(Role-Based Access Control)

1.1 RBAC0模型

RBAC0模型如下:

这是最基本也是最核心的权限模型。 它包括用户/角色/权限。 用户和角色是多对多的关系,角色和权限也是多对多的关系。 用户是运营的主体,按类型可分为2B和2C用户。 他们可以是后台管理系统的用户,也可以是OA系统的内部员工,也可以是C端用户,比如阿里云用户。 角色起到桥梁的作用,连接用户和权限之间的关系。 每个角色可以关联多个权限。 同时,一个用户关联了多个角色,因此这个用户对多个角色拥有多个权限。 可能有人会问为什么用户不直接关联权限呢? 在用户基数较小的系统中,比如20人的小系统,管理员可以直接给用户关联权限,工作量不大。 选择一个用户并检查所需的用户。 权限已完成。 但是在实际的企业系统中,用户基数比较大,而且很多都是相同的权限,只是一个共同的访问权限。 如果管理员授权100人以上,工作量会很大。 这里引入了“角色(Role)”的概念,一个角色可以关联多个用户,管理员只需要将角色分配给用户,那么用户就拥有该角色下的所有权限,这样的设计不仅提高了效率,还有很大的可扩展性。 权限是用户可以访问的资源,包括页面权限、操作权限和数据权限:

以上就是RBAC的核心设计和模型分析。 该模型也称为 RBAC0。 在核心概念的基础上,RBAC还提供了扩展模型。 包括RBAC1、RBAC2、RBAC3模型。下面分别介绍这三种类型

1.2 RBAC1模型

该模型引入了角色继承(Hierarchical Role)的概念,即角色之间存在上下级关系,角色之间的继承关系分为一般继承关系和受限继承关系。 一般继承关系只要求角色继承关系是绝对偏序关系,允许角色间多重继承。 受限继承关系进一步要求角色继承关系为树形结构,实现角色间的单继承。 这种设计可以对角色进行分组分层,一定程度上简化了权限管理。

权限数据库表设计_数据库权限管理设计_数据权限 设计

1.3 RBAC2模型

在核心模型的基础上进行了角色约束控制,在RBAC2模型中加入了职责分离,规定了何时将权限分配给角色,或者何时将角色分配给用户,以及用户何时激活角色。特定时刻必须遵守的强制性规则。 职责分离包括静态职责分离和动态职责分离。 主要包括以下约束:

1.4 RBAC3模型

即最全面的权限管理,它是在RBAC0的基础上,融合了RBAC1和RBAC2

1.5 用户组

当平台的用户基数增加数据库权限管理设计,角色种类增多,有些人属性相同,比如财务部门的所有员工,如果直接给用户分配角色,管理员的工作量会很大。 如果将用户划分到一个用户组中,那么管理员直接给用户组分配一个角色,用户组中的每个用户都可以拥有这个角色。 其他用户加入该用户组后,可自动获取该用户组的所有角色,退出该用户组也同时撤销该用户组下的角色,无需管理员手动管理角色。 根据用户组是否存在上下级关系,可以分为上下级用户组和普通用户组:

每个公司都会涉及到组织机构和职位,下面就着重介绍这两个。

权限数据库表设计_数据库权限管理设计_数据权限 设计

1.5.1 组织机构

常见的组织结构如下:

我们可以将组织与角色相关联。 用户加入组织后,将自动获得组织的所有角色。 无需管理员手动授权,大大减少了工作量。 同时,用户跳槽时,只需要调整组织和角色即可。 批量调整。 该组织的另一个功能是控制数据权限。 如果一个角色关联了一个组织,则该角色只能看到该组织下的数据权限。

1.5.2 位置

假设财务部门的职位如下:

每个组织部门下设多个职位。 比如财务部有主任、会计、出纳等职位。 虽然都是同一个部门,但是每个职位的权限是不一样的,职位越高权限越大。 董事拥有全部权限,会计和出纳拥有部分权限。 在特殊情况下,一个人可能身穿不止一份工作。

1.6 具有组织/职位/用户组的模型

数据权限 设计_权限数据库表设计_数据库权限管理设计

根据以上场景,可以设计一种新的权限模型,如下图所示: 根据系统的复杂程度,多对多关系和一对一关系可能会发生变化。

2.授权流程

授权就是给用户授予角色,按流程分为手动授权和审批授权。 授权中心可以同时配置这两种类型,可以提高授权的灵活性。

3.表结构

有了上面的权限模型,设计表结构就不难了。 下面是多系统下的表结构。 简单设计下,提供主要思路:

4.权限框架

项目中可以使用其中的一种框架,它们的优缺点以及如何使用将在后面的文章中详细介绍。

数据库权限管理设计_权限数据库表设计_数据权限 设计

5 结论

权限系统可以说是整个系统中最基础的,但也可以说是非常复杂的。 在实际项目中,会遇到多系统、多用户类型、多使用场景,需要具体问题具体分析,但最核心的RBAC模型是不变的,我们可以对其进行扩展以满足需求。 最后,如果您觉得本文对您有帮助,可以点个赞,谢谢支持!

欢迎加入我的知识星球,一起探讨架构,交流源码。 要加入,请按住下面的二维码:

数据权限 设计_数据库权限管理设计_权限数据库表设计

知识星球上已更新源码,分析如下:

最近更新的系列《太郎SpringBoot 2.X入门》20多篇数据库权限管理设计,涵盖MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo 、RabbitMQ、RocketMQ、Kafka、性能测试等。

提供了一个近3W行代码的SpringBoot实例,以及一个4W多行代码的电商微服务项目。