基于角色的访问控制(RBAC)

来源 | 编程新说

责编 | Carol

出品 | CSDN云计算(ID:CSDNcloud)

很多时候,需要对一些事物进行控制,如一个房间,为了不让人随便进,通常会装一把锁,如果要想进入,你必须得有一把钥匙,且还得和这个锁匹配才行。

基于此做一个抽象,其实包含三方面内容:

1)一个是被控制的事物,通常就算资源。

2)一个是想访问这些资源的人所必须拥有的东西,通常就算凭证。

3)还有一个就是进行凭证和资源的匹配。

Web应用中的资源


网络时代绝大多数都是web应用。web应用的一大特点就是Client和Server。客户端发起一个请求,服务器就给出一个响应。

对客户端的要求只有一个,那就是要知道请求对应的URL。客户端请求不同的URL就可以得到不同的内容,或者反过来说,客户端为了得到不同的内容只要请求不同的URL即可。

这些内容可以认为是服务器开放给客户端的资源,所以站在客户端的角度,服务器上的资源就是由许多URL组成的,因为客户端只能通过URL的方式和服务器打交道。

URL可以说是一个底层本质的东西,它的上面会有很多不同的展现形式:

菜单可以对应URL

页面可以对应URL

按钮可以对应URL

Ajax可以对应URL

服务API可以对应URL

文件下载可以对应URL

静态文件css、js、images可以对应URL

这些就是通常我们见到的资源,它们就是要被控制访问的事物。

把凭证授给用户

凭证这个东西的作用,大家都很熟悉,就是可以用来证明一个事物的合法性。比如一个身份证可以证明你是一个合法公民。一张车票可以证明你是一个合法乘客。

但是对凭证的存在形式,其实并没有什么硬性规定,因为随着时间的推移,它是会变的,也就是说具有阶段性。

就拿锁来说,它的凭证以前是一把钥匙,后来变成一串数字密码,再后来变成一个指纹,现在又变成一张人脸或一个声纹,再往未来发展,可能就是一种意念了。

web应用中的资源就是URL,我们可以把这个URL直接作为凭证授予用户,只需把这些授予关系存储起来即可,说白了就是,哪个用户可以访问哪些URL。

或者也可以把这些URL进行等价变形,把变形后的产物授予用户,总之,只要能建立起合理的映射关系就行了。

角色出现的必然性

假如有一个新闻系统,为了让某人能顺利的发新闻,需要由技术人员授予她一大堆的URL。这样一个“简单”的事情中,就存在两个潜在的弊端。

一个是必须由技术人员来做,因为非技术人员可能连URL这个词都不知道是什么。一个是一大堆的URL,太多了,操作麻烦,还可能漏掉某个。

究竟由谁发新闻,这是业务和管理上的事情,不应该由技术来做,他们不做的原因是因为门槛太高,所以技术应该想办法来降低工作的门槛。

可能领导觉得现在的新闻发布人员工作很认真,于是让她去审核新闻了,又来了一个新的新闻发布人员。这下又要“折腾”技术人员了。

技术需要先把她的发布新闻URL去掉,授给她审核新闻的URL,然后再把发布新闻的URL授给新来的人员。可能过两天又来了一个新闻发布人员。

这可简直要了技术人员的“命”了,所以技术应该想办法来降低工作的繁琐性,绝对是利人又利己。

在计算机里,解决此类问题的一个“标准指导方针”就是,抽象和封装。抽象出一层来,把复杂的东西封装起来。

就是让不该看的人看不到他不该看的东西,只让他看到他该看到的东西。就像同一个事物在不同人眼里是不一样的。

一栋大楼,在设计人员眼里就是一堆图纸,在工程人员眼里就是一堆结构和承重计算的公式,在建筑工人眼里就是一堆钢筋和混凝土,在装修人员眼里就是毛坯房,在业主眼里就是他自己未来的家。

最终角色这个东西就是被抽象出来的一层,它起到过渡的作用,从这一层向下是技术人员负责的,从这一层向上是业务管理人员负责的。

技术人员预定义好一些角色,比如新闻发布员、新闻审核员,然后把和发布相关的所有URL授予发布员这个角色,把和审核相关的所有URL授予审核员这个角色。

剩下的工作就交给业务管理人员来做,他们把角色授予某个人,只需一步即可,也不涉及什么技术知识。这真是各管各的,两全其美。

其实这个角色就是上面提到的一堆URL的等价变形,最终起到的也是一个传递映射关系的桥梁作用。

凭证和资源的匹配方式

在持有凭证去访问资源的时候需要进行凭证和资源的匹配。就像进考场要看准考证、上车前要验票一样。

凭证的存在形式不同,匹配的方式也不同,如果是钥匙,需要机械匹配。如果是密码,需要相等性匹配。

如果是指纹、图像、声纹,需要的是概率性匹配,因为这些东西貌似无法相等,只有一个匹配度。

对于web应用的URL,只有用户访问时才需要匹配,我们就在请求必经的路上设置一到多道关卡进行拦截,常用的就是过滤器和拦截器。

在被拦截以后,从请求中解析出本次访问的URL,从当前登陆用户信息中拿到具有的角色和能访问的URL,然后按自己设定的一套逻辑去匹配。

如果匹配成功就放行,会自动进行后续处理。匹配不成功就禁止通行,告诉他不能通行的原因,结束本次访问。

基于角色的访问控制

其实上面讲的就是基于角色的访问控制的原理。原理很简单,如果没有特殊要求的话,实现也不难。


就是经典的五张表:

1)权限表,也称资源表,记录所有的资源URL。

2)角色表,记录所有的角色。

3)角色权限表,记录每个角色都能访问哪些权限。

4)用户表,记录所有用户。

5)用户角色表,记录每个用户被授予的角色。

按实际需求决定的部分:

1)一个用户是只能有一个角色,还是可以有多个,这个依托用户角色表即可实现。

2)角色之间是否可以继承,是单继承还是多继承,这个需要一个单独的角色继承表来存储。

两个特殊的事物:

1)一个是没有任何限制的公共资源,如js、css、images等,可以设置一个白名单,把它们放入其中,这些URL相当于“免检”。

2)一个特殊的用户,如超级管理员,这个需要在用户表进行标识,遇到它后直接放行,因为它也是“免检”。

是否选择现成的框架

常用的现成的框架就是Spring Security和Apache Shiro。它们属于上手不难,想用好却不简单的那种。

我觉得可以按以下情况来选择:

1)有专门团队或人员维护的,可以选择从零研发或基于框架的深度扩展。

2)没有专人负责,也不想麻烦的,建议不要用框架,应该自己写代码简单实现。

3)不怕麻烦的,爱研究的,可以选择框架,掌握使用方式,明白运行原理,看看底层源码。

总之,一定要做到可控,特别是自身或团队在条件不允许的情况下,千万别去捅马蜂窝。

福利扫描添加小编微信,备注“姓名+公司职位”,入驻【CSDN博客】,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!
推荐阅读:数据分析如何帮助揭示冠状病毒的真相?
一文助你快速理解ZooKeeper
蚂蚁金服AAAI收录论文曝光,动态网络剪枝方法、无语预训练的网络剪枝技术有重大突破
2.7 亿学生宅家上课,家长有意见了......
2020 年,远程办公太难?技术大佬齐支招!
2020年区块链领域最具影响力人物Top 20
真香,朕在看了!猛戳“阅读原文”,填写中国远程办公-调查问卷

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10 ie中没有java,win10没有ie浏览器怎么处理_window10找不到ie浏览器如何解决

很多用户升级到win10系统之后,发现默认浏览器是edge,想要使用ie浏览器的时候却发现没有ie浏览器,遇到window10找不到ie浏览器的话该怎么办呢,下面随小编一起来看看详细的解决步骤吧。方案一:1、直接搜索,右…

手把手教程:用Python开发一个自然语言处理模型,并用Flask进行部署

截住到目前为止,我们已经开发了许多机器学习模型,对测试数据进行了数值预测,并测试了结果。实际上,生成预测只是机器学习项目的一部分,尽管它是我认为最重要的部分。今天我们来创建一个用于文档分类、垃圾过滤的自然语…

干货|Spring Cloud Stream 体系及原理介绍

Spring Cloud Stream 在 Spring Cloud 体系内用于构建高度可扩展的基于事件驱动的微服务,其目的是为了简化消息在 Spring Cloud 应用程序中的开发。Spring Cloud Stream (后面以 SCS 代替 Spring Cloud Stream) 本身内容很多,而且它还有很多外部的依赖&a…

阿里小程序云应用上线了,有哪些看点?

3月21日,在2019阿里云峰会北京上,阿里巴巴旗下的阿里云、支付宝、淘宝、钉钉、高德等联合发布“阿里巴巴小程序繁星计划”:提供20亿元补贴,扶持200万小程序开发者、100万商家。凡入选“超星”的小程序,入驻支付宝、淘宝…

10 个实用功能告诉你,谷歌云(Google Cloud)相对亚马逊云(AWS)有哪些优势?...

来源 | itnext编译 | 武明利责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)有很多文章将谷歌云提供商(GCP)与亚马逊云服务(AWS)进行比较,但这篇文章并不想要做比较。作者主要是一个AW…

mybatis-plus大批量数据插入缓慢问题

文章目录问题排查结果建议问题 最近项目用的mybatis-plus做的映射,有个批处理文件内容的需求,在使用mybatis-plus的批处理方法saveBatch时发现速度特别慢,测试从1000到10000到80000条基本上是线性增加,80000条时差不多要90秒。 …

世界冠军之路:菜鸟车辆路径规划求解引擎研发历程

阿里妹导读:车辆路径规划问题(Vehicle Routing Problem, VRP)是物流领域最经典的优化问题之一,具有极大的学术研究意义和实际应用价值。菜鸟网络高级算法专家胡浩源带领仓配智能化算法团队经过两年的研发,逐步沉淀出了…

原来,阿里工程师才是隐藏的“修图高手”!

阿里妹导读:在现实世界中,信息通常以不同的模态同时出现。这里提到的模态主要指信息的来源或者形式。例如在淘宝场景中,每个商品通常包含标题、商品短视频、主图、附图、各种商品属性(类目,价格,销量&#…

分布式数据集训营,从入门到精通,从理论到实践,你不可错过的精品课程!...

责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)随着微服务、云化架构的兴起,分布式数据库开始在越来越多的场景得到应用,从外围系统到中台业务,再到核心交易业务,分布式数据库成为企业基础架构转…

mybatis批量插入10万条数据的优化过程

在使用mybatis插入大量数据的时候,为了提高效率,放弃循环插入,改为批量插入,mapper如下: package com.lcy.service.mapper;import com.lcy.service.pojo.TestVO; import org.apache.ibatis.annotations.Insert;import java.util.List;/*** 功能描述:** author liuc…

java spring注解维护,从一次工程启动失败谈谈 spring 注解

原标题:从一次工程启动失败谈谈 spring 注解檀宝权Java 后端开发工程师,负责度假 App 后端和广告后端开发维护工作,熟悉 Tomcat,Spring,Mybatis,会点 Python,Lua。一、背景线上环境升级成 JDK8后…

探索Java日志的奥秘:底层日志系统-log4j2

前言 log4j2是apache在log4j的基础上,参考logback架构实现的一套新的日志系统(我感觉是apache害怕logback了)。 log4j2的官方文档上写着一些它的优点: 在拥有全部logback特性的情况下,还修复了一些隐藏问题API 分离&…

大地震!某大厂“硬核”抢人,放话:只要AI人才,高中毕业都行!

特斯拉创始人马斯克,在2019年曾许下很多承诺,其中一个就是:2019年底实现完全的自动驾驶。虽然这个承诺又成了flag,但是不妨碍他今年继续为这个承诺努力。这不,就在上周一,马斯克之间在twitter上放话了&…

Dart编译技术在服务端的探索和应用

前言 最近闲鱼技术团队在FlutterDart的多端一体化的基础上,实现了FaaS研发模式。Dart吸取了其它高级语言设计的精华,例如Smalltalk的Image技术、JVM的HotSpot和Dart编译技术又师出同门。由Dart实现的语言容器,它可以在启动速度、运行性能有不…

Python + ElasticSearch:有了这个超级武器,你也可以报名参加诗词大会了! | 博文精选...

来源 | CSDN 博客作者 | 天元浪子责编 | Carol出品 | CSDN云计算(ID:CSDNcloud)意犹未尽的诗词大会正月十六,中国诗词大会第五季落下帷幕。从2016年2月12日第一季于开播,迄今恰好四周年。在这个舞台上,时年…

Node.js 应用故障排查手册 —— 大纲与常规问题指标简介

楔子 你是否想要尝试进行 Node.js 应用开发但是又总听人说它不安全、稳定性差,想在公司推广扩张大前端的能力范畴和影响又说服不了技术领导。 JavaScript 发展到今天,早已脱离原本浏览器的战场,借助于 Node.js 的诞生将其触角伸到了服务端、P…

蚂蚁金服CTO程立:做工程要有“拧螺丝”的精神

“一台机器可能有无数颗螺丝,需要一个一个地拧,而且需要一圈一圈地拧,才能让系统间严丝合缝,顺利工作。代码的世界里,一个项目到底成功与否,也是取决于几个模型的关键特殊设置,就像拧螺丝一样。…

linux 环境安装DBI和DBD_03

文章目录一、软件下载二、安装DBI2.1. DBI下载2.2. 解压2.3. 安装依赖2.4. 编译2.5. 执行测试2.6. 安装2.6. 修改权限三、安装DBD-ORACLE组件3.1. DBI下载3.2. 修改权限3.3. 切换用户3.4. 解压3.5. 进入目录3.6. 初始化环境变量3.6. 查看配置的环境变量是否配置3.7. 刷新配置文…

像数据科学家一样思考:12步指南(上)

介绍 目前,数据科学家正在受到很多关注,因此,有关数据科学的书籍正在激增。我看过很多关于数据科学的书籍,在我看来他们中的大多数更关注工具和技术,而不是数据科学中细微问题的解决。直到我遇到Brian Godsey的“像数…

Mybatis-plus 大数据量数据流式查询通用接口

文章目录一、案例需求二、使用案例:2.1. 自定义查询接口2.2. 逻辑处理类2.3. 调用案例2.4. 具体逻辑处理案例三、企业案例3.1. key名称获取3.2. 逻辑类测试3.3.最后一个批次处理方案四、 通用SQL预编译处理4.1. 业务场景4.2. xml形式4.3. 注解形式五、企业案例5.1. …