数据库权限管理设计-权限数据库表设计
点击上面的“芋头源代码”,选择“”
做一个积极的人,而不是一个积极的废人!
源码精品专栏
来源: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多行代码的电商微服务项目。