当前位置: 首页 > news >正文

自定义RBAC(1)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~

在对Spring Security稍做了解之后,可以知道,Spring Security其实只是一个实现认证授权的框架,封装了很多实现细节。但也有一些不方便的地方,比如:

1、自定义一些拦截器时,会导致过滤器重复执行,这属于是框架本身的bug;

2、为了验证简单的权限,加入了很多不需要的东西。这也是使用别人的框架不得不承受的;

3、新版本可能会有一些bug,旧版本可能满足不了需求,尴尬。

之前也提到过ACL、RBAC、PBAC等名词,但它们都是干嘛的?资料有很多,却没有专门的内容来说清楚。尤其是在具体开发工作中,该使用哪种权限模型实现需求?

接下来就掰扯掰扯。

什么是权限?权限就是对资源的访问许可,就像这样:

那什么又是认证与授权呢?分开来说:

1、认证:你是谁(身份)

2、授权:能干啥(行为,也可以包括不能干啥)

而且现在互联网应用不再像过去的信息化管理系统那样死板,而是需要根据用户的喜好来呈现不同的内容,某种程度上,这其实也是一种权限,千人千面的权限系统:

除了用户看到的不同,就连传统上应该由内部运营人员承担的职责,现在也分裂一部分出去,给外部的「合约职员」:

而且,在很多小公司里面,开发工程师很多时候都在承担系统管理员的角色:

所以,从互联网角色来说,其实现在没人说得清权限到底应该是什么。

但是,架构师和专家们觉得不说清楚又不行,所以就有了下面一些所谓的「常见权限模型」。

一、DAC:Discretionary Access Control,自主访问控制。

DAC系统会识别用户,然后根据被操作对象(Subject)的权限控制列表ACL(或者权限控制矩阵ACM)的信息来决定用户的是否能对其进行哪些操作,例如读取或修改。而拥有对象权限的用户,又可以将该对象的权限分配给其他用户,所以称之为“自主(Discretionary)”控制。这种设计最常见的应用就是文件系统的权限设计,如微软的NTFS。

有些机构觉得,这么做太随意的,不够安全,所以提出了另一些想法:MAC。

二、MAC:Mandatory Access Control,强制访问控制

每个对象都有一些权限标识,每个用户同样也会有一些权限标识。用户能否对该对象进行操作取决于双方权限标识的关系,这个限制判断通常是由系统硬性规定的。例如谍战片里面的特工查阅资料时,有时会出现因为权限等级不够而无法查阅的情形。

MAC非常适合秘密机构或者其他等级观念非常强烈的行业,但对于商业服务系统,则不够灵活。所以商人们和技术专家就想出了中和的办法:PBAC。

三、PBAC:Policy-Based Access Control,基于策略的访问控制

它是一种介于DAC与MAC之间的权限模型,系统会预先定义一些操作,可以由系统管理员来决定哪些用户能执行这些操作。这既不同于用户授权给其他人,又不同于强制指定权限给用户。现在基本上已经被淘汰,只存在于一些老旧系统之中,例如Windows的安全策略:

既然PBAC不行,那专家们再想想办法吧,不行就拿一个祭天。于是,有了RBAC。也就是迄今为止最为普及的权限设计模型,没有之一。

所以,从DAC、MAC、PBAC到RBAC,这几种权限系统一直都是共存的,没有说哪种特别厉害,哪种特别没用:把驴牵到磨盘上也能磨出好面粉。


感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

相关文章:

  • BYOL(NeurIPS 2020)原理解读
  • Java面试必问题46:Gateway详解以及使用方法
  • MySQL 5.7的备份恢复到MySQL 8.0
  • 爬虫——如何应对具有反爬机制的网站
  • 新版洗衣洗鞋工厂系统,多门店多代收点上门取货小程序;
  • 【hive】lateral view侧视图
  • 【三维重建】【slam】【分块重建】LocalRF:逐步优化的局部辐射场的鲁棒视图合成
  • C语言printf()大全
  • Ruoyi框架使用过程碰到的问题——请求地址‘/***/***‘,认证失败‘未能读取到有效Token‘,无法访问系统资源
  • 【Java基础】Java字符切割工具详解与使用(1)
  • 【QT】关于QSerialPort的错误处理 (Error Handling)及错误类型
  • SQL Server添加用户登录
  • (Qt) 子组件绘制QPainter
  • (附源码)springboot平衡膳食小程序 毕业设计 250859
  • [附源码]计算机毕业设计基于springboot的图书互换系统
  • 二叉树OJ题详解
  • 十一、面向对象 其他要点
  • 数据结构—树、有序二叉树
  • Spring Boot文档阅读笔记-Scheduling Tasks
  • HTML爱心照片墙源码
  • [附源码]计算机毕业设计基于SpringBoot的党务管理系统
  • 使用Python和SAS Viya分析社交网络
  • Java并发编程学习14-任务关闭(上)
  • Nginx安装搭建之源码方式(Centos7)
  • 华为网络模拟器ENSP安装(附安装包)
  • [附源码]计算机毕业设计基于Springboot的项目管理系统
  • RISC-V SiFiveU64内核——L2 Prefetcher预期器
  • Java项目:SSM电器商城系统
  • 线程池详细介绍
  • 微服务框架 SpringCloud微服务架构 10 使用Docker 10.9 数据卷挂载案例2
  • HTML5期末大作业:用DIV+CSS技术设计的网页与实现(剪纸传统文化网页设计主题)
  • 【Verilog基础】Verilog中不可综合语句及可综合模型原则