前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深入理解RBAC权限系统

深入理解RBAC权限系统

作者头像
修己xj
发布2023-12-13 13:58:19
1.5K0
发布2023-12-13 13:58:19
举报
文章被收录于专栏:修己xj修己xj

最近,一位朋友在面试中被问及如何设计一个权限系统。我们注意到目前许多后台管理系统(包括一些热门的如若依快速开发平台)都采用了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的灵活性和适应性。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 修己xj 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • RBAC描述
    • 角色定义
      • 权限定义
        • 角色分配
          • 权限关联
            • 会话管理
              • 审计和监控
                • 动态调整:
                • RBAC的特点
                • 数据库表设计
                  • sys_menu
                    • sys_role
                      • sys_role_menu
                        • sys_user
                          • sys_user_role
                            • sys_logininfor
                            • 总结
                            相关产品与服务
                            云数据库 Redis
                            腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
                            领券
                            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档