深入理解RBAC权限系统

本文涉及的产品
访问控制,不限时长
简介: RBAC(Role-Based Access Control)是一种访问控制模型,其核心概念是基于角色的权限分配。该模型的设计目标是简化对系统资源的访问管理,提高系统的安全性和可维护性。

最近,一位朋友在面试中被问及如何设计一个权限系统。我们注意到目前许多后台管理系统(包括一些热门的如若依快速开发平台)都采用了RBAC访问控制策略。该策略通过将权限授予角色,然后将角色分配给用户,从而实现对系统资源的访问控制。今天,我们将详细解释基于RBAC的权限系统。

RBAC-SYS.jpg

RBAC描述

RBAC(Role-Based Access Control)是一种访问控制模型,其核心概念是基于角色的权限分配。该模型的设计目标是简化对系统资源的访问管理,提高系统的安全性和可维护性。

RBAC的实现通常包括以下步骤:

  • 设计角色和权限的层次结构。
  • 将用户分配到合适的角色。
  • 关联权限到角色,形成访问控制矩阵。
  • 通过会话管理机制维护权限的有效性。




RBAC-MODULE.png

以下是RBAC权限系统的一些描述:

角色定义

在RBAC系统中,角色是一组相互关联的权限的集合。角色可以代表用户的职能、职位或责任。例如,系统管理员、普通用户、审计员等都可以是角色。在一些企业中权限系统中,他们采用的三权分立的权限体系,就是通过角色和用户的类型来控制的。

权限定义

权限表示对系统资源或操作的访问权力,包括不同级别的访问,如读、写、执行等操作。通常,权限与具体任务或操作相关联,例如访问特定文件、修改用户信息等。在我们的权限系统中,权限的粒度一般细化到页面上的操作按钮级别。一些系统还包含数据权限,例如可以访问当前部门及其下级部门的数据,或者只能查看特定系统的数据等。

角色分配

用户通过被分配到一个或多个角色而获得相应的权限。这使得权限管理更加简化,因为不再需要为每个用户直接分配权限,而只需管理角色与权限的关系。

权限关联

每个角色都与特定的权限相关联。这意味着当用户被分配到某个角色时,他们将自动拥有该角色所关联的权限。这种关联可以通过访问控制矩阵或类似的结构来实现。

会话管理

用户登录系统后,会话管理机制负责维护用户与其角色相关联的权限。一旦会话结束,通常会触发权限的自动撤销。我们通常采用将会话存储到Redis中,并设置过期时间的方式来管理会话。用户在访问时会刷新过期时间,确保会话的有效性。

审计和监控

RBAC系统通常包括审计和监控功能,以便记录用户活动、权限变更和系统访问情况。这有助于检测潜在的安全问题和确保合规性。

动态调整:

RBAC系统允许在运行时动态调整角色和权限的关联关系。这种灵活性使得系统能够适应不断变化的组织结构和业务需求。

RBAC的特点

  • 简化管理

通过将权限关联到角色,RBAC简化了大规模用户权限管理的复杂性。

  • 灵活性

RBAC模型具有较强的灵活性,可以根据组织需求调整角色和权限的关联关系。

  • 降低错误

通过减少直接分配权限给用户的操作,RBAC降低了由于错误授权导致的系统安全风险。

数据库表设计

数据库表ER图如下:

RBAC-ER.png

具体表设计如下:

sys_menu

表注释: 菜单权限表

字段 类型 默认 注释
id (主键) bigint 菜单ID
menu_name varchar(50) NULL 菜单名称
parent_id bigint 0 父菜单ID
order_num int 0 显示顺序
path varchar(200) 路由地址
component varchar(255) NULL 组件路径
query varchar(255) NULL 路由参数
is_frame int 1 是否为外链(0是 1否)
menu_type char(1) 菜单类型(M目录 C菜单 F按钮)
visible char(1) 0 菜单状态(0显示 1隐藏)
status char(1) 0 菜单状态(0正常 1停用)
perms varchar(100) NULL 权限标识
icon varchar(100) # 菜单图标
create_by varchar(64) 创建者
create_time datetime NULL 创建时间
update_by varchar(64) 更新者
update_time datetime NULL 更新时间
remark varchar(500) 备注

sys_role

表注释: 角色信息表

字段 类型 默认 注释
id (主键) bigint 角色ID
role_name varchar(30) NULL 角色名称
role_key varchar(100) NULL 角色权限字符串
status char(1) NULL 角色状态(0正常 1停用)
del_flag char(1) 0 删除标志(0代表存在 2代表删除)
create_by varchar(64) 创建者
create_time datetime NULL 创建时间
update_by varchar(64) 更新者
update_time datetime NULL 更新时间
remark varchar(500) NULL 备注

sys_role_menu

表注释: 角色和菜单关联表

字段 类型 默认 注释
id (主键) bigint
role_id bigint NULL 角色ID
menu_id bigint NULL 菜单ID

sys_user

表注释: 用户信息表

字段 类型 默认 注释
id (主键) bigint 用户ID
user_name varchar(30) NULL 用户账号
nick_name varchar(30) NULL 用户昵称
phonenumber varchar(11) 手机号码
password varchar(100) 密码
status char(1) 0 帐号状态(0正常 1停用)
del_flag char(1) 0 删除标志(0代表存在 2代表删除)
create_by varchar(64) 创建者
create_time datetime NULL 创建时间
update_by varchar(64) 更新者
update_time datetime NULL 更新时间
remark varchar(500) NULL 备注

sys_user_role

表注释: 用户和角色关联表

字段 类型 默认 注释
id (主键) bigint 主键ID
user_id bigint NULL 用户ID
role_id bigint NULL 角色ID

sys_logininfor

表注释: 系统登录日志表

字段 类型 默认 注释
id (主键) bigint 访问ID
user_id bigint NULL 用户id
user_name varchar(50) 用户账号
ipaddr varchar(128) 登录IP地址
login_location varchar(255) 登录地点
browser varchar(50) 浏览器类型
os varchar(50) 操作系统
status char(1) 0 登录状态(0成功 1失败)
msg varchar(255) 提示消息
login_time datetime NULL 访问时间

总结

RBAC权限系统作为一种可靠而强大的访问控制机制,为系统安全提供了坚实的基础。通过深入理解RBAC的核心概念和工作原理,我们可以更好地应用该模型,确保系统在访问控制方面达到最佳性能,同时提高系统的可维护性和灵活性。一些系统在基于RBAC角色系统的基础上引入了临时角色、基础角色等功能,以进一步完善RBAC的灵活性和适应性。

相关实践学习
消息队列+Serverless+Tablestore:实现高弹性的电商订单系统
基于消息队列以及函数计算,快速部署一个高弹性的商品订单系统,能够应对抢购场景下的高并发情况。
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
目录
相关文章
|
5月前
|
存储 安全 API
权限设计种类【RBAC、ABAC】
权限设计种类【RBAC、ABAC】
493 2
|
4月前
|
前端开发 NoSQL 中间件
rbac基于用户角色的权限管理
rbac - 基于角色的权限管理,介绍了acl(访问权限列表)基于用户的权限管理,rbac基于角色的权限管理。
rbac基于用户角色的权限管理
|
安全 数据安全/隐私保护
基于RBAC实现权限系统
基于RBAC实现权限系统
450 0
|
6月前
|
数据安全/隐私保护
基于RBAC0模型的简单权限系统设计角色
基于RBAC0模型的简单权限系统设计角色
|
数据安全/隐私保护
RBAC权限模型
RBAC权限模型
149 0
|
SQL 存储 数据库
RBAC模型整合数据权限
RBAC模型整合数据权限
433 0
|
监控 安全 数据安全/隐私保护
|
Kubernetes 安全 中间件
RBAC权限管理(一)
RBAC权限管理
1147 0
|
存储 缓存 运维
基于RBAC模型的权限管理设计
RBAC模型(Role-Based Access Control:基于角色的访问控制)是比较早期提出的权限实现模型,在多用户计算机时期该思想即被提出,其中以美国George Mason大学信息安全技术实验室(LIST)提出的RBAC96模型最具有代表,并得到了普遍的公认。 RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程,也即是将权限问题转换为Who、What、How的问题,Who、What、How构成了访问权限三元组,具体的理论可以参考RBAC96。
549 0
基于RBAC模型的权限管理设计
|
安全 数据安全/隐私保护
RBAC的用户权限管理原理
RBAC的用户权限管理原理
158 0