开发一个系统,必然面临权限控制的问题-RBAC权限模型

开发一个系统,必然面临权限控制的问题-RBAC权限模型

基于角色的权限控制模型RBAC详解图解

当我们开发系统时rbac角色权限表设计,必须面对权限控制的问题rbac角色权限表设计,即不同的用户有不同的访问、操作、数据权限。 理论上的访问控制模型包括:自主访问控制(DAC)、强制访问控制(MAC)、基于属性的访问控制(ABAC)等。其中开发者最常用、相对容易使用和通用的是RBAC权限模型(基于角色的访问控制)。 本文将向您介绍这种权限模型。

1.RBAC权限模型介绍

RBAC权限模型(Role-Based Access Control)是:基于角色的权限控制。 模型中有几个关键术语:

RBAC权限模型的核心授权逻辑如下:

2.RBAC的演变

2.1. 用户与权限直接相关

角色权限分配流程图_角色权限表怎么设计_rbac角色权限表设计

用户与权限直接相关

当人们想到权限控制时,首先想到的是用户和权限之间的直接关系。 简单来说:用户拥有一定的权限。 如图所示:

该模型可以清晰地表达用户和权限之间的关系,并且足够简单。 但也存在问题:

2.2. 一个用户有一个角色

在实际的集团业务中,可以对用户进行分类。 例如,薪酬管理系统通常按级别分类:经理、高级工程师、中级工程师、初级工程师。 即按照一定的角色分类,通常相同角色的用户具有相同的权限。 经过这样的改变,用户赋能就可以转化为角色赋能。

角色权限表怎么设计_rbac角色权限表设计_角色权限分配流程图

一个用户有一个角色

我们可以用下图的数据库设计模型来描述这样的关系。

角色权限表怎么设计_rbac角色权限表设计_角色权限分配流程图

用户有角色——数据库设计

2.3 一个用户拥有一个或多个角色

但在实际应用系统中,一个用户一个角色远远不能满足需求。 如果我们希望用户暂时同时担任销售角色和副总裁角色。 我该怎么办? 为了增加系统设计的适用性,我们通常设计:

我们可以用下图的数据库设计模型来描述这样的关系。

rbac角色权限表设计_角色权限表怎么设计_角色权限分配流程图

一个或多个用户角色

2、页面访问权限和操作权限

角色权限分配流程图_rbac角色权限表设计_角色权限表怎么设计

页面访问权限和操作权限分别存储在单独的表中

为了满足这个需求,我们可以将页面资源(菜单)和操作资源(按钮)分别存储在单独的表中,如上图所示。 您还可以将两者存储在表中并使用字段来标记它们。

3. 数据权限

数据权限比较容易理解,即用户可以访问和操作哪些数据。

因此,为了面对复杂的需求音效,数据权限控制通常是由程序员编写个性化的SQL来限制数据范围来控制,而不是交给权限模型或Spring Security或shiro。 当然,这个问题也可以从权限模型或者权限框架的角度来解决程序开发,但是适用性有限。

文章来源:https://www.toutiao.com/a6762713616614425099/