RBAC简介_动力节点Java学院整理

发布时间 - 2026-01-11 02:51:21    点击率:

什么是权限管理

基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。

权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。

用户身份认证

身份认证,就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。

 用户名密码身份认证流程

 

 关键对象

上边的流程图中需要理解以下关键对象:

Subject:主体

访问系统的用户,主体可以是用户、程序等,进行认证的都称为主体;

Principal:身份信息

是主体(subject)进行身份认证的标识,标识必须具有唯一性,如用户名、手机号、邮箱地址等,一个主体可以有多个身份,但是必须有一个主身份(Primary Principal)。

credential:凭证信息

是只有主体自己知道的安全信息,如密码、证书等。

授权

授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。

授权流程

 下图中橙色为授权流程。

 

关键对象

授权可简单理解为who对what(which)进行How操作:

n Who,即主体(Subject),主体需要访问系统中的资源。

n What,即资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如商品信息为资源类型,类型为t01的商品为资源实例,编号为001的商品信息也属于资源实例。

n How,权限/许可(Permission),规定了主体对资源的操作许可,权限离开资源没有意义,如用户查询权限、用户添加权限、某个类方法的调用权限、编号为001用户的修改权限等,通过权限可知主体对哪些资源都有哪些操作许可。

权限分为粗颗粒和细颗粒,粗颗粒权限是指对资源类型的权限,细颗粒权限是对资源实例的权限。

主体、资源、权限关系如下图:

 

权限模型

对上节中的主体、资源、权限通过数据模型表示。

主体(账号、密码)

资源(资源名称、访问地址)

权限(权限名称、资源id)

角色(角色名称)

角色和权限关系(角色id、权限id)

主体和角色关系(主体id、角色id)

如下图:

 

通常企业开发中将资源和权限表合并为一张权限表,如下:

资源(资源名称、访问地址)

权限(权限名称、资源id)

合并为:

权限(权限名称、资源名称、资源访问地址)

 

上图常被称为权限管理的通用模型,不过企业在开发中根据系统自身的特点还会对上图进行修改,但是用户、角色、权限、用户角色关系、角色权限关系是需要去理解的。

权限分配

对主体分配权限,主体只允许在权限范围内对资源进行操作,比如:对u01用户分配商品修改权限,u01用户只能对商品进行修改。

权限分配的数据通常需要持久化,根据上边的数据模型创建表并将用户的权限信息存储在数据库中。

 权限控制

用户拥有了权限即可操作权限范围内的资源,系统不知道主体是否具有访问权限需要对用户的访问进行控制。

基于角色的访问控制

RBAC基于角色的访问控制(Role-Based Access Control)是以角色为中心进行访问控制,比如:主体的角色为总经理可以查询企业运营报表,查询员工工资信息等,访问控制流程如下:

 

上图中的判断逻辑代码可以理解为:

if(主体.hasRole("总经理角色id")){

查询工资

}

缺点:以角色进行访问控制粒度较粗,如果上图中查询工资所需要的角色变化为总经理和部门经理,此时就需要修改判断逻辑为“判断主体的角色是否是总经理或部门经理”,系统可扩展性差。

修改代码如下:

if(主体.hasRole("总经理角色id") || 主体.hasRole("部门经理角色id")){

查询工资

}

基于资源的访问控制

RBAC基于资源的访问控制(Resource-Based Access Control)是以资源为中心进行访问控制,比如:主体必须具有查询工资权限才可以查询员工工资信息等,访问控制流程如下:

上图中的判断逻辑代码可以理解为:

if(主体.hasPermission("查询工资权限标识")){

查询工资

}

优点:系统设计时定义好查询工资的权限标识,即使查询工资所需要的角色变化为总经理和部门经理也只需要将“查询工资信息权限”添加到“部门经理角色”的权限列表中,判断逻辑不用修改,系统可扩展性强。

权限管理解决方案

粗颗粒度和细颗粒度

 什么是粗颗粒度和细颗粒度

对资源类型的管理称为粗颗粒度权限管理,即只控制到菜单、按钮、方法,粗粒度的例子比如:用户具有用户管理的权限,具有导出订单明细的权限。对资源实例的控制称为细颗粒度权限管理,即控制到数据级别的权限,比如:用户只允许修改本部门的员工信息,用户只允许导出自己创建的订单明细。

 如何实现粗颗粒度和细颗粒度

对于粗颗粒度的权限管理可以很容易做系统架构级别的功能,即系统功能操作使用统一的粗颗粒度的权限管理。

对于细颗粒度的权限管理不建议做成系统架构级别的功能,因为对数据级别的控制是系统的业务需求,随着业务需求的变更业务功能变化的可能性很大,建议对数据级别的权限控制在业务层个性化开发,比如:用户只允许修改自己创建的商品信息可以在service接口添加校验实现,service接口需要传入当前操作人的标识,与商品信息创建人标识对比,不一致则不允许修改商品信息。


# RBAC简介  # 详解Spring Security 中的四种权限控制方式  # 基于Django框架的权限组件rbac实例讲解  # ThinkPHP的RBAC(基于角色权限控制)深入解析  # RBAC权限模型_动力节点Java学院整理  # 基于角色的权限控制模型RBAC图文教程  # 访问控制  # 身份认证  # 图中  # 部门经理  # 只允许  # 为总  # 并为  # 所需要  # 如下图  # 上图  # 访问权限  # 都要  # 多个  # 是指  # 只需  # 很容易  # 并将  # 才可以  # 会对  # 谁能 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: jQuery validate插件功能与用法详解  node.js报错:Cannot find module 'ejs'的解决办法  海南网站制作公司有哪些,海口网是哪家的?  网站制作软件有哪些,制图软件有哪些?  JavaScript如何实现倒计时_时间函数如何精确控制  JS中页面与页面之间超链接跳转中文乱码问题的解决办法  EditPlus中的正则表达式 实战(1)  如何快速搭建高效香港服务器网站?  如何用腾讯建站主机快速创建免费网站?  JavaScript如何实现路由_前端路由原理是什么  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  如何用虚拟主机快速搭建网站?详细步骤解析  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  如何正确下载安装西数主机建站助手?  javascript读取文本节点方法小结  香港服务器如何优化才能显著提升网站加载速度?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  用v-html解决Vue.js渲染中html标签不被解析的问题  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  EditPlus 正则表达式 实战(3)  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  Linux系统命令中tree命令详解  手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  如何在云主机快速搭建网站站点?  Laravel如何将应用部署到生产服务器_Laravel生产环境部署流程  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  如何快速搭建FTP站点实现文件共享?  如何在宝塔面板中修改默认建站目录?  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  使用Dockerfile构建java web环境  如何实现建站之星域名转发设置?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Laravel DB事务怎么使用_Laravel数据库事务回滚操作  做企业网站制作流程,企业网站制作基本流程有哪些?  Thinkphp 中 distinct 的用法解析  HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  Laravel如何实现RSS订阅源功能_Laravel动态生成网站XML格式订阅内容【教程】  bootstrap日历插件datetimepicker使用方法  Laravel PHP版本要求一览_Laravel各版本环境要求对照  Laravel怎么清理缓存_Laravel optimize clear命令详解  javascript中的数组方法有哪些_如何利用数组方法简化数据处理  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言