• (十二)权限之RBAC


    这几天一直在研究权限,突然发现RBAC是权限中的基础,所以花儿点时间详细解释一下。

    在这里加一些个人理解吧。在实际开发中,不同的用户登录后显示不同的菜单、按钮之类的,这些无外乎就是权限实现的,在这里可以用RBAC就可以实现,但是为什么还要用shrio或者 Spring Security这些东东呢,刚接触的时候我也一知半解的,但是可以这样理解的,框架是高大上的,你虽然使用rbac实现了菜单的权限控制,但是你直接使用其url还是可以访问的呀,这时候你用一些高大上的东西,比如shiro或者 Spring Security这个,就可以拦截你没有权限的那些url不允许直接被访问了,原理类似拦截器。所有权限的基础还是RBAC,究竟什么是RBAC呢,下面为大家更为详细的介绍一下。

    百度百科关于RBAC的解释:

    基于角色的访问控制(RBAC)是实施面向企业安全策略的一种有效的访问控制方式。

    其基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。

    RBAC:

    个人理解为实际上就是对于权限这块的表结构的设计,设计之初遵循了RBAC的原则,但是根据不同的实际业务,对于RBAC的表结构设计也会有些许的出入,这里不要太过纠结。RBAC是一种模型,是一种思想,是一种核心思想,但是就其思想而言,不是要你完全参照,而是你在这个基础之上,融入你自己的思想,赋予你的业务之上,达到适用你的业务。

    总之:不要让框框架架来限制你的业务,也不要让你的业务局限于框框架架。但是也不推荐你去改动框框架架,而是基于框框架架做业务封装。

    RBAC简介

    RBAC是Role Based Access Control的缩写,意思是基于角色访问控制。

    RBAC实际上就是针对产品去发掘需求的时候所用到的Who(角色)、What(拥有什么资源)、How(有哪些操作)的一种方式。

    在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What进行How的操作。

    RBAC主要包含四个子模型:RBAC0、RBAC1、RBAC2和RBAC3,整体又叫做RBAC96。

    RBAC0

    RBAC0是RBAC96模型家族中的基础,也被称作核心部分,RBAC1、RBAC2和RBAC3就是在此基础之上发展演变过来的。

    可以理解它是由四个部分组成的,分别有:用户、角色、会话、权限
    这就导致了这种分配关系是多对多:用户对应多个角色、角色对应多个权限。
    用户与会话一对一,会话与角色一对多

    RBAC1

    RBAC1是在RBAC0模型基础之上增加了角色分层概念和角色之间的继承关系。

    角色分层指的是同一个角色可以用不同等级,不同等级又对应着不同的权限;
    角色继承关系指的是子角色可以对父角色的权限进行继承,但是子角色的权限一定小于父角色。

    RBAC2

    RBAC2是在RBAC0模型基础之上增加了角色约束,主要约束哪些操作是可进行,哪些是不可进行。

    主要约束有以下三个方面:

    • 角色互斥约束:是指在系统运行中,只可以同时激活运行时互斥角色集合中的一个角色;
    • 角色基数约束:是限制某一个用户最多被分配或者激活的角色数目,或者限制某一个角色最多被赋予的权限数目;
    • 先决条件角色约束:是指某些用户只有在己经拥有特定角色的前提下,才能被分配到某种角色,或者某种角色只有在已经被分配到特定权限的前提下,才能被赋予某些权限

    RBAC3

    RBAC3则是集聚了RBAC1和RBAC2的全部特点,同时将角色继承关系和约束条件关系两者都融入到模型中了。

  • 相关阅读:
    Java并发编程原理与实战九:synchronized的原理与使用
    Java并发编程原理与实战八:产生线程安全性问题原因(javap字节码分析)
    Java并发编程原理与实战七:线程带来的风险
    Java并发编程原理与实战六:主线程等待子线程解决方案
    Java并发编程原理与实战五:创建线程的多种方式
    Java并发编程原理与实战四:线程如何中断
    Java并发编程原理与实战三:多线程与多进程的联系以及上下文切换所导致资源浪费问题
    Java并发编程原理与实战二:并行&并发&多线程的理解
    ConcurrentHashMap 产生NullPointerException
    Java并发编程原理与实战一:聊聊并发
  • 原文地址:https://www.cnblogs.com/changyuyao/p/14167032.html
Copyright © 2020-2023  润新知