精华内容
下载资源
问答
  • 该项目是一套基于springboot、mybatis、thymeleaf及layui的轻量级快速开发框架、脚手架、后台管理系统、权限系统,上手简单,拿来即用,通用的项目结构为广大开发者去除了大部分的复杂繁琐的代码工作。同时对学习...
  • 权限系统的基本概念和架构

    万次阅读 热门讨论 2020-12-21 19:33:06
    权限系统是我们在系统设计和应用中一种非常常见的系统。一般来说权限系统的功能分为认证和授权两种。认证就非常简单的,验证完用户名密码就算认证成功,而授权里面的套路就很多了,本文将会详细讲解权限系统中的一些...

    简介

    权限系统是我们在系统设计和应用中一种非常常见的系统。一般来说权限系统的功能分为认证和授权两种。认证就非常简单的,验证完用户名密码就算认证成功,而授权里面的套路就很多了,本文将会详细讲解权限系统中的一些基本概念和设计上面要注意的问题,希望大家能够喜欢。

    授权流程

    在授权流程中主要有三个部分,分别是资源管理,权限和策略管理,策略的执行。

    先看下资源管理:

    首先我们需要创建一个资源服务器,然后在资源服务器中创建各种资源,最后对各种资源设置一些scope,scope就是跟资源相关的的一些可执行的操作。

    什么是资源呢?资源可以是一个web页面,一个RESTful资源,一个文件等等。

    举个例子,假如我们有一个图书馆资源服务器,图书馆有一个本《人月神话》的书,那么这本书就被称作资源。接下来我们需要为这个资源定义一些可操作性的scope,或者说策略。比如说只有本校的学生才能够借阅这本书。

    当我们定义好资源之后,就需要对这些资源进行一些权限和策略的设置,这就需要进行权限和策略管理。

    看下权限和策略管理的流程:

    首先是创建策略,然后定义权限,最后将权限和策略进行关联。

    策略就是定义的一些去访问某些资源或者权限的操作,策略是和具体的权限是分离的,策略只制定了在什么情况下可以做(某些事情),或者在某些情况下不能做(某些事情),这些事情就是后面创建的权限。

    比如说,拥有user角色可以做什么事情,就是一种策略。

    策略定义好了,我们就可以创建权限了,权限很好理解,比如:借《人月神话》的书的权限。

    我们把策略和权限组合起来就是:拥有user角色的,可以借《人月神话》这本书。

    通用的策略有很多种,比如说基于属性的访问策略,基于角色的访问策略,基于用户的访问策略,基于上下文的访问策略,基于时间的访问策略,基于规则的访问策略或者其他的自定义策略等。

    通常来说,基于角色的访问策略role-based access control (RBAC)是最常用的。

    我们把用户赋予相应的角色,然后在访问资源的时候根据不同的角色策略来执行不同的permission操作。

    虽然RBAC非常有用,用途也非常广泛,但是它还是有下面的几个缺点:

    1. 资源和角色是强绑定的,如果我们对角色进行一些添加,删除和修改操作,将会影响到所有相关联的资源。
    2. 对于角色的修改则可能需要我们对代码进行修改。
    3. 如果你的应用程序非常大的话,使用RBAC可能会出现一些错误。
    4. RBAC的灵活性不够强,不能够做到更加细粒度的权限控制。

    最后,我们看一下策略的执行。

    策略的执行就是真正的在资源服务器上执行相应的授权工作。一般来说我们在资源服务器中有一个 Policy Enforcement Point (PEP)来和授权服务器进行交互,根据授权服务器返回的授权信息来执行相应的资源操作。

    权限系统的架构

    先看一张权限系统的基本架构图:

    其中有下面几个关键组件:

    • PAP全称是Policy Administration Point,它是一个权限管理的后台页面,我们需要这样的一个后台界面来配置和管理权限和资源。

    • PDP全称是Policy Decision Point,它提供了一些决策策略,通过这些策略将授权请求发送到相应的位置,并根据请求的权限对策略进行相应的决策。

    • PEP全称是Policy Enforcement Point,在不同的资源服务器中执行相应的策略。

    • PIP全称是Policy Information Point,在判断和决策策略的时候,可以从中获取相应的属性信息。

    上图中,Storage就是数据的存储和分类,这里我们主要存储resouce,scope,permission和policy这4种对象。

    resource代表的是要访问的对象,可以是一个或者多个对象的集合。比如说:web程序中的页面等等。资源是受保护的对象,需要为资源配置一些权限。

    每个资源都有一个唯一的标识符,可以代表一个资源或一组资源。 例如,你可以管理一个银行帐户资源,该资源代表并定义了所有银行帐户的一组授权策略。 但是,你也可以使用另一个名为Alice’s Banking Account的资源,该资源代表由单个客户拥有的单个资源,该资源可以具有自己的一组授权策略。

    我们看一个resource的例子:

    上图中,我们将不同的URI定义为resource。并给不同的resource起了唯一的名字。

    Scope是对资源的一系列操作,比如你可以对资源进行读,写或者编辑,删除操作,这些都可以被称之为scope。当然,你也可以指定resource中的某个属性作为scope。

    然后就是Permission,权限将受保护的对象与是否授予访问权限的策略相关联。

    比如我们有下面一个权限:

    X CAN DO Y ON RESOURCE Z
    

    x表示的是一个或者多个用户,角色或者groups,或者是他们的组合。

    Y表示的是对资源的一种操作。

    Z就是资源了,比如/index页面。

    我们可以创建基于resource的permission:

    也可以创建基于scope的permission:

    Policy定义了要授予对象访问权限必须满足的条件。Policy并没有指明要保护的对象,只是指定了访问给定对象必须满足的条件。

    比如上面的Policy,指定了什么样的角色,针对什么样的client,制定出来的什么样的逻辑。

    有了策略就需要一个Policy Provider,Policy Provider主要为我们提供特定策略类型的实现。

    为了做好策略评估的工作,我们还需要一个策略评估引擎,通过这个engine来执行策略的评估工作。

    除此之外,作为一个认证服务器,我们还需要对外提供认证服务,那么最好的办法就是提供OAuth2或者OpenID Connect的token服务。

    另外我们还需要一个Protection API,用于resource server和权限管理服务进行交互。

    本文已收录于 http://www.flydean.com/authorization-service/

    最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

    欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

    展开全文
  • 最全的权限系统设计

    千次阅读 多人点赞 2020-03-22 20:47:53
    权限管理是公司数据安全的重要保证,针对不同的岗位,不同的级别看到的...如何让各个岗位的人在系统上各司其职,就是权限管理要解决的问题。本文会详细介绍权限设计的模型,使用本文中的模型基本可以解决所有的权限问题

    目录

    1 为什么需要权限管理

    2 权限模型

    2.1 权限设计

    2.2 为什么需要角色

    2.3 权限模型的演进

    2.3.1 RBAC模型

    2.3.2 角色继承的RBAC模型

    2.3.3 带约束的RBAC模型

    2.4 用户划分

    2.4.1 用户组

    2.4.2 组织

    2.4.3 职位

    2.5 理想的RBAC模型

    3 权限系统表设计

    3.1 标准RBAC模型表设计

    3.2 理想RBAC模型表设计

     

    4 结语


    1 为什么需要权限管理

    日常工作中权限的问题时时刻刻伴随着我们,程序员新入职一家公司需要找人开通各种权限,比如网络连接的权限、编码下载提交的权限、监控平台登录的权限、运营平台查数据的权限等等。在很多时候我们会觉得这么多繁杂的申请给工作带来不便,并且如果突然想要查一些数据,发现没有申请过权限,需要再走审批流程,时间拉得会很长。那为什么还需要这么严格的权限管理呢?

    举个例子,一家支付公司有运营后台,运营后台可以查到所有的商户信息,法人代表信息,交易信息以及费率配置信息,如果我们把这些信息不加筛选都给到公司的每一个小伙伴,那么跑市场的都可以操作商家的费率信息,如果一个不小心把费率改了会造成巨大的损失。又比如商户的信息都是非常隐秘的,有些居心不良的小伙伴把这些信息拿出来卖给商家的竞争对手,会给商家造成严重的不良后果。虽然这么做都是个别人人为的过错,但是制度上如果本身这些信息不开放出来就能在很大程度上避免违法乱纪的事情发生了。

    总体来讲权限管理是公司数据安全的重要保证,针对不同的岗位,不同的级别看到的数据是不一样的,操作数据的限制也是不一样的。比如涉及到资金的信息只开放给财务的相关岗位,涉及到配置的信息只开放给运营的相关岗位,这样各司其职能避免很多不必要的安全问题。如何让各个岗位的人在系统上各司其职,就是权限管理要解决的问题。

    2 权限模型

    2.1 权限设计

    从业务分类上来讲权限可以分为数据查看权限,数据修改权限等,对应到系统设计中有页面权限、菜单权限、按钮权限等。菜单也分一级菜单、二级菜单甚至三级菜单,以csdn文章编辑页面左侧菜单栏为例是分了两级菜单。菜单对应的页面里又有很多按钮,我们在设计的时候最好把权限设计成树形结构,这样在申请权限的时候就可以一目了然的看到菜单的结构,需要哪些权限就非常的明了了。如下图所示:

    按照这个架构,按钮的父级是二级菜单,二级菜单的父级是一级菜单,这样用户申请权限的时候非常清晰的看到自己需要哪些权限。

    2.2 为什么需要角色

    权限结构梳理清晰之后,需要思考怎么把权限分配给用户,用户少的情况下,可以直接分配,一个用户可以有多个权限,统一一个权限可以被多个用户拥有,用户-权限的模型结构如下所示:

    这种模型能够满足权限的基本分配能力,但是随着用户数量的增长,这种模型的弊端就凸显出来了,每一个用户都需要去分配权限,非常的浪费管理员的时间和精力,并且用户和权限杂乱的对应关系会给后期带来巨大的维护成本。用户-权限对应关系图:

    这种对应关系在用户多的情况下基本无法维护了。其实很多用户负责同一个业务模块所需要的权限是一样的,这样的话我们是不是可以借助第三个媒介,把需要相同的权限都分配给这个媒介,然后用户和媒介关联起来,用户就拥有了媒介的权限了。这就是经典的RBAC模型,其中媒介就是我们通常所说的角色。

    2.3 权限模型的演进

    2.3.1 RBAC模型

    有了角色之后可以把权限分配给角色,需要相同权限的用户和角色对应起来就可以了,一个权限可以分配给多个角色,一个角色可以拥有多个权限,同样一个用户可以分配多个角色,一个角色也可以对应多个用户,对应模型如下所示:

    这就是经典的RBAC模型了(role-based-access-control),在这里面角色起到了桥梁左右,连接了用户和权限的关系,每个角色可以拥有多个权限,每个用户可以分配多个角色,这样用户就拥有了多个角色的多个权限。同时因为有角色作为媒介,大大降低了错综复杂的交互关系,比如一家有上万人的公司,角色可能只需要几百个就搞定了,因为很多用户需要的权限是一样的,分配一样的角色就可以了。这种模型的对应关系图如下所示:

    用户和角色,角色和权限都是多对多的关系,这种模型是最通用的权限管理模型,节省了很大的权限维护成本, 但是实际的业务千变万化,权限管理的模型也需要根据不同的业务模型适当的调整,比如一个公司内部的组织架构是分层级的,层级越高权限越大,因为层级高的人不仅要拥有自己下属拥有的权限,二期还要有一些额外的权限。RBAC模型可以给不同层级的人分配不同的角色,层级高的对应角色的权限就多,这样的处理方式可以解决问题,但是有没有更好的解决办法呢,答案肯定是有的,这就引出角色继承的RBAC模型。

    2.3.2 角色继承的RBAC模型

    角色继承的RBAC模型又称RBAC1模型。每个公司都有自己的组织架构,比如公司里管理财务的人员有财务总监、财务主管、出纳员等,财务主管需要拥有但不限于出纳员的权限,财务总监需要拥有但不限于财务主管的权限,像这种管理关系向下兼容的模式就需要用到角色继承的RBAC模型。角色继承的RBAC模型的思路是上层角色继承下层角色的所有权限,并且可以额外拥有其他权限。模型如下所示:

    从模型图中可以看出下级角色拥有的权限,上级角色都拥有,并且上级角色可以拥有其他的权限。角色的层级关系可以分为两种,一种是下级角色只能拥有一个上级角色,但是上级角色可以拥有多个下级角色,这种结构用图形表示是一个树形结构,如下图所示:

    还有一种关系是下级角色可以拥有多个上级角色,上级角色也可以拥有多个下级角色,这种结构用图形表示是一个有向无环图,如下图所示:

    树形图是我们比较常用的,因为一个用户一般情况下不会同时有多个直属上级,比如财务部只能有一个财务总监,但是可以有多个财务主管和收纳员。

    2.3.3 带约束的RBAC模型

    带约束的RBAC模型又成RBAC2模型。在实际工作中,为了安全的考虑会有很多约束条件,比如财务部里同一个人不能即是会计又是审核员,跟一个人同一时间不能即是运动员又是裁判员是一个道理的,又比如财务部的审核员不能超过2个,不能1个也没有。因为角色和权限是关联的,所以我们做好角色的约束就可以了,常见的约束条件有:角色互斥、基数约束、先决条件约束等。

    角色互斥:如果角色A和角色B是互斥关系的话,那么一个用户同一时间不能即拥有角色A,又拥有角色B,只能拥有其中的一个角色。比如我们给一个用户赋予了会计的角色就不能同时再赋予审核员的角色,如果想拥有审核员的角色就必须先去掉会计的角色。假设提交角色和审核角色是互质的,我们可以用图形表示:

    基数约束: 同一个角色被分配的用户数量可以被限制,比如规定拥有超级管理员角色的用户有且只有1个;用户被分配的角色数量也需要被限制,角色被分配的权限数量也可以被限制。

    先决条件约束:用户想被赋予上级角色,首先需要拥有下级角色,比如技术负责人的角色和普通技术员工角色是上下级关系,那么用户想要用户技术负责人的角色就要先拥有普通技术员工的角色。

    2.4 用户划分

    2.4.1 用户组

    我们创建角色是为了解决用户数量大的情况下,用户分配权限繁琐以及用户-权限关系维护成本高的问题。抽象出一个角色,把需要一起操作的权限分配给这个角色,把角色赋予用户,用户就拥有了角色上的权限,这样避免了一个个的给用户分配权限,节省了大量的资源。同样的如果有一批用户需要相同的角色,我们也需要一个个的给用户分配角色,比如一个公司的客服部门有500多个人,有一天研发部研发了一套查询后台数据的产品,客服的小伙伴都需要使用,但是客服由于之前并没有统一的一个角色给到所有的客服小伙伴,这时候需要新加一个角色,把权限分配给该角色,然后再把角色一个个分配给客服人员,这时候会发现给500个用户一个个添加角色非常的麻烦。但是客服人员又有共同的属性,所以我们可以创建一个用户组,所有的客服人员都属于客服用户组,把角色分配给客服用户组,这个用户组下面的所有用户就拥有了需要的权限。RBAC模型添加用户组之后的模型图如下所示:

    很多朋友会问,用户组和角色有什么区别呢?简单的来说,用户组是一群用户的组合,而角色是用户和权限之间的桥梁。用户组把相同属性的用户组合起来,比如同一个项目的开发、产品、测试可以是一个用户组,同一个部门的相同职位的员工可以是一个用户组, 一个用户组可以是一个职级,可以是一个部门,可以是一起做事情的来自不同岗位的人。

    用户可以分组,权限也可以分组,权限特别多的情况下,可以把一个模块的权限组合起来成为一个权限组,权限组也是解决权限和角色对应关系复杂的问题。比如我们定义权限的时候一级菜单、二级菜单、按钮都可以是权限,一个一级菜单下面有几十个二级菜单,每个二级菜单下面又有几十个按钮,这时候我们把权限一个个分配给角色也是非常麻烦的,可以采用分组的方法把权限分组,然后把分好的组赋予角色就可以了。给权限分组也是个技术活,需要理清楚权限之间的关系,比如支付的运营后台我们需要查各种信息,账务的数据、订单的数据、商户的数据等等,这些查询的数据并不在一个页面,每个页面也有很多按钮,我们可以把这几个页面以及按钮对应的权限组合成一个权限组赋予角色。加入权限组之后的RBAC模型如下所示:

    实际工作中我们很少给权限分组,给用户分组的场景会多一些,有的时候用户组也可以直接和权限关联,这个看实际的业务场景是否需要,权限模型没有统一的,业务越复杂业务模型会约多样化。 

    2.4.2 组织

    每个公司都有自己的组织架构,很多时候权限的分配可以根据组织架构来划分。因为同一个组织内的小伙伴使用的大部分权限是一样的。如下所示一个公司的组织架构图:

    按照这个组织架构,每一个组织里的成员使用的基础权限很可能是一样的,比如人力资源都需要看到人才招聘的相关信息,市场推广都需要看到行业分析的相关信息,按照组织来分配角色会有很多优势:

    实现权限分配的自动化:和组织关系打通之后,按照组织来分配角色,如果有新入职的用户,被划分在某个组织下面之后,会自动获取该组织下所有的权限,无需人工分配。又比如有用户调岗,只需要把组织关系调整就可以了,权限会跟着组织关系自动调整,也无需人工干预。 这么做首先需要把权限和组织关系打通。

    控制数据权限:把角色关联到组织,组织里的成员只能看到本组织下的数据,比如市场推广和大客定制,市场推广针对的是零散的客户,大可定制针对的是有一定体量的客户,相互的数据虽然在一个平台,但是只能看自己组织下的数据。

    加入组织之后的RBAC模型如下所示:

    用户可以在多个组织中,因为组织也有层级结构,一个组织里只可以有多个用户,所以用户和组织的关系是多对多的关系,组织和角色的关系是一对一的关系。这个在工作中可以根据实际情况来确定对应关系。

    2.4.3 职位

    一个组织下面会有很多职位,比如财务管理会有财务总监、财务主管、会计、出纳员等职位,每个职位需要的权限是不一样的,可以像组织那样根据职位来分配不同的角色,由于一个人的职位是固定的,所以用户跟职位的对应关系时一对一的关系,职位跟角色的对应关系可以是多对多的关系。加入职位的RBAC模型如下所示:

    2.5 理想的RBAC模型

    RBAC模型根据不同业务场景的需要会有很多种演变,实际工作中业务是非常复杂的,权限分配也是非常复杂的,想要做出通用且高效的模型很困难。我们把RBAC模型的演变汇总起来会是一个支撑大数据量以及复杂业务的理想的模型。把RBAC、RBAC1、RBAC2、用户组、组织、职位汇总起来的模型如下所示:

     按照这个模型基本上能够解决所有的权限问题,其中的对应关系可以根据实际的业务情况来确定,一般情况下,组织和职位是一对多的关系,特殊情况下可以有多对多的情况,需要根据实际情况来定。

    理想的RBAC模型并不是说我们一开始建权限模型就可以这么做,而是数据体量、业务复杂度达到一定程度之后可以使用这个模型来解决权限的问题,如果数据量特别少,比如刚成立的公司只有十几个人,那完全可以用用户-权限模型,都没有必要使用RBAC模型。

    3 权限系统表设计

    3.1 标准RBAC模型表设计

    标准RBAC模型的表是比较简单了,要表示用户-角色-权限三者之前的关系,首先要创建用户表、角色表、权限表,用户和角色是多对多的关系,角色和权限是多对多的关系,需要再创建两章关系表,分别是用户-角色关系表和角色-权限关系表。这六张表的ER图如下所示:

    3.2 理想RBAC模型表设计

    理想的RBAC模型是标准RBAC模型经过多次扩展得到的,表结构也会比较复杂,因为要维护很多关系,如下图所示是理想的RBAC模型的ER图:

     

    这里面需要强调的是角色互斥表,互斥的关系可以放在角色上,也可以放在权限上,看实际工作的需求。 

    4 结语

    本文从易到难非常详细的介绍了权限模型的设计,在工作中需要根据实际情况来定义模型,千人以内的公司使用RBAC模型是完全够用的,没有必要吧权限模型设计的过于复杂。模型的选择要根据具体情况,比如公司体量、业务类型、人员数量等。总之最适合自己公司的模型就是最好的模型,权限模式和设计模式是一样的,都是为了更好的解决问题,不要为了使用模型而使用模型。

    展开全文
  • 分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!... saas平台由于其本身“按需购买”...作为一个B端平台型产品,系统权限设计是其中一个非常重要的组成部...

    分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程 

    saas平台由于其本身“按需购买”的特性,在设计规划权限时,需要考虑统一配置权限如何规避企业没有购买的应用,以及如有部分应用存在数据权限不同的问题。现在,本文简单总结一下当前saas模式下权限的几种设计方式。

    作为一个B端平台型产品,系统的权限设计是其中一个非常重要的组成部分,没有权限管理的系统仿佛一个没有门的房子,任何人都可以随意查看甚至调整,对系统的安全性存在非常大的隐患,而saas模式下由于应用基本独立,随时可能被企业拆分使用。这里权限的统一与拆分问题也十分重要,本文简单总结一下当前saas模式下权限的几种设计方式。

    一、权限管理的重要性

    权限管理一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,权限管理基本是任何一个系统的标配模块。它的作用不仅在于保护系统数据安全性、防止留下系统漏洞,更能在庞大的系统下进行模块和数据配置,让不同的角色进入系统看到不同的模块和数据,最大程度地提高系统的易用性。大部分系统中权限管理是作为一个独立的管理入口,统一设置所有的业务的权限。而saas平台由于其本身“按需购买”的特性,在设计规划权限时,需要考虑统一配置权限如何规避企业没有购买的应用,以及如有部分应用存在数据权限不同的问题。

    二、抽象权限组成

    权限到底是名词属性还是动词属性,还是名词、动词属性均包含,这对于权限的含义很重要。如果是名词属性的话,那么它应该是有具体的指代物;如果是动词,则应该具有行为表示。

    • 权限的名词属性:api接口、页面、功能点。
    • 权限的动词属性:可操作、不可操作。

    那么我们现在来看,其实权限是名词、动词属性,它一定是表达了两层含义。即控制的对象、操作。向上引申可将权限划分为3个组成部分:

    1. 页面权限:用户可以看到那些页面;
    2. 操作权限:用户可以在页面内进行那些操作,增删改查等;
    3. 数据权限:用户可以看到那些数据或内容;

    三、常见的权限控制模型

    (1)自主访问控制(DAC:Discretionary Access Control)

    系统会识别用户,然后根据被操作对象(object)的权限控制列表(ACL:Access Control List)或者权限控制矩阵(ACL:Access Control Matrix)的信息来决定用户的是否能对其进行哪些操作,例如读取或修改。而拥有对象权限的用户,又可以将该对象的权限分配给其他用户,所以称之为“自主(Discretionary)”控制。DAC最大缺陷就是所有用户的权限不能统一管理,用户和用户的权限比较分散,后期调整只能单个进行调整,不易维护。

    (2)强制访问控制(MAC:Mandatory Access Control)

    在MAC的设计中,每一个对象都都有一些权限标识,每个用户同样也会有一些权限标识,而用户能否对该对象进行操作取决于双方的权限标识的关系,这个限制判断通常是由系统硬性限制且无法回避的。强制访问控制多应用于对安全性要求比较高的系统,如多级安全军事系统;

    (3)基于角色的访问控制(RBAC:Role-Based Access Control)

    RBAC是我们当前使用范围最广的一种权限设计模型,模型基础就是用户和角色,角色和权限做多对多的对应。标准的RBAC模型包括四个部件模型,分别为基本模型RABC0、角色分级模型RABC1、角色限制模型RABC2、统一模型RABC3。

    1. RBAC0(基本模型)定义了完全支持RBAC概念的任何系统的最低需求。RBAC0的模型中包括用户(U)、角色(R)和许可权(P)等3类实体集合,RABC0是权限管理的核心部分,其他的版本都是建立在0的基础上。
    2. RBAC1(角色分级模型)基于RBAC0模型,引入角色间的继承关系,即角色上有了上下级的区别,角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。这种模型合适于角色之间的层次明确,包含明确。
    3. RBAC2(角色限制模型)引入了角色间的约束关系,主要约束规则包括:角色间的互斥关系,在处理用户和这些角色之间的关系时,包括静态分离和动态分离,静态分离指互斥的角色不能同时赋予同一个用户;动态分离指用户不能同时操作两个互斥的角色进行登录。
    4. RBAC3(统一模型)同时包含了1和2的特性。

    总结:SAAS后台权限设计案例分析

    如图所示,每个用户关联一个或多个角色,每个角色关联一个或多个权限,从而可以实现了非常灵活的权限管理。角色可以根据实际业务需求灵活创建,这样就省去了每新增一个用户就要关联一遍所有权限的麻烦。简单来说RBAC就是:用户关联角色,角色关联权限。并且在产品和数据设计层面,有更好的扩展性,可控制到任意的粒度。

    (4)基于属性的权限验证(ABAC:Attribute-Based Access Control)

    ABAC则是通过动态计算一个或一组属性,来是否满足某种条件来进行授权判断(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。该设计过于复杂,暂未参透。

    四、基于RBAC权限模型的SAAS平台权限系统设计

    对于SAAS平台这样庞大复杂的平台来说,权限系统设计得越全面、精细、后期的系统扩展性就越高,所以这里采用RBAC权限模型,RBAC权限模型是现有比在这方面比较成熟的权限设计模型,应用这个模型能解决常规的系统权限配置问题,其基本原理也能适用于平台权限设计。

    RBAC对权限抽象概括:判断【Who是否可以对What进行How的访问操作(Operator)】

    RBAC支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则。

    1. 最小权限原则之所以被RBAC所支持,是因为RBAC可以将其角色配置成其完成任务所需要的最小的权限集。
    2. 责任分离原则可以通过调用相互独立互斥的角色来共同完成敏感的任务而体现,比如要求一个计帐员和财务管理员共参与同一过帐。
    3. 数据抽象可以通过权限的抽象来体现,如财务操作用借款、存款等抽象权限,而不用操作系统提供的典型的读、写、执行权限。然而这些原则必须通过RBAC各部件的详细配置才能得以体现。

    ——来自百度百科

    以某物业公司内部信息平台为例,该物业公司平台分为客户档案、房产档案、收费系统、客服工单等多应用结构,其中物业公司组织架构为多层级,基本样式如下如。

    总结:SAAS后台权限设计案例分析

    组织架构

    总结:SAAS后台权限设计案例分析

    应用入口

    总结:SAAS后台权限设计案例分析

    功能页面,以上我们可以将:

    • 组织架构=数据权限
    • 应用入口以及应用菜单=页面权限
    • 功能操作点=操作权限

    1. 基本模型:RBAC0

    抽取角色,建立角色与用户的关系。这里的角色主要是指在组织内承担特定的业务活动,并和别的业务角色进行交互的业务角色。业务角色的抽取主要有两种方式:一种是直接和岗位对应,另外一种是根据流程的本质和需要定义角色。确定各角色的用例图,如下图(简单示例):

    总结:SAAS后台权限设计案例分析

    根据业务复杂度、用户特点进行原型草图设计,在进行权限分配时,可以从增加角色维度以及增加用户维度。如下图:

    总结:SAAS后台权限设计案例分析

    新建角色维度

    总结:SAAS后台权限设计案例分析

    新建用户维度。使用此模型时,我们需要注意的问题有:

    1. 用户和角色为多对一的关系,如果需要用到多对多的关系,将涉及到角色关系的处理,此模型并不适用。
    2. 权限一定是动态可配置的,不是静态的,这点一定要在着手开发前进行说明,一般情况,权限的数据结构为树形,合理的数据结构,便于前端根据实际需求进行解析;
    3. 人员在选择角色获取到对应的权限数据后,最好可以提供一个二次编辑界面,权限会更加灵活。

    2. 角色分级模型:RBAC1

    RBAC1基于RBAC0模型,引入角色间的继承关系,即角色上有了上下级的区别,角色分级模型适用于平台业务功能较多,单个角色设置操作过于繁琐,引用角色分级,可让角色之间存在继承或被继承的关系,比如客服主管可直拥有下级所有员工拥有的权限。建立角色管理,确定角色跟用户之间的关系。(要求角色间有明显的层级关系,所以在没有其他需求的情况下,这里根据业务部门和岗位进行角色的抽取)

    建立角色层级关系和继承关系。

    总结:SAAS后台权限设计案例分析

    角色层级关系

    总结:SAAS后台权限设计案例分析

    一般继承关系

    总结:SAAS后台权限设计案例分析

    受限继承关系

    给角色赋予权限(应用入口权限——应用页面权限、应用页面中操作功能权限、数据查看权限。)权限赋予同RBAC0。增加一个角色管理。如下图:

    总结:SAAS后台权限设计案例分析

    通过角色管理即可以将下级角色的权限直接赋值给上级权限,但由于低级角色的权限全部被高级角色继承,就会导致没有自己角色的私有权限;也可以为人员提供一个二次编辑权限界面,但是一旦编辑后,若后续所属角色权限发生变化,会直接覆盖原有编辑后的权限。

    3. 角色限制模型:RBAC2

    RBAC2,它是RBAC的约束模型,RBAC2也是建立的RBAC0的基础之上的,在RBAC0基础上假如了约束的概念,主要引入了静态职责分离SSD(Static Separation of Duty)和动态职责分离DSD(Dynamic Separation of Duty)。SSD是用户和角色的指派阶段加入的,主要是对用户和角色有如下约束:

    1. 互斥角色:同一个用户在两个互斥角色中只能选择一个;
    2. 基数约束:一个用户拥有的角色是有限的,一个角色拥有的许可也是有限的;
    3. 先决条件约束:用户想要获得高级角色,首先必须拥有低级角色。

    DSD是会话和角色之间的约束,可以动态的约束用户拥有的角色,如一个用户可以拥有两个角色,但是运行时只能激活一个角色。

    总结:SAAS后台权限设计案例分析

    角色权限配置界面可参照RBAC0。用户在配置角色或角色下新建添加用户时,需要根据用户已有的角色身份进行判断。示例:用户A配置角色为客服组长,则可继续添加角色为客服主管,若客服主管已被分配给他人,则也不能分配给用户A(遵从最大拥有数原则)。若同时将保安主管分派至用户A,则操作时,需要选择操作角色。

    总结:SAAS后台权限设计案例分析

    当一个用户配置了多个角色身份时,权限取并集。

    4. 统一模型:RBAC3

    统一模型是包括了继承和分离两种情况的更为复杂的模型,即既要定义角色间的的继承关系,也要维护好角色间的责任分离关系。在这里就不做过多的赘述(两张图供大家参考),因为只要维护好了角色间的约束关系,其他规则类的处理方式同RABC1和RABC2。

    总结:SAAS后台权限设计案例分析

    角色管理

    总结:SAAS后台权限设计案例分析

    权限配置

    五、总结

    1. 角色数据权限

    1. 不同的角色身份查看的角色数据时不相同的,比如物业分公司中深圳区域分公司的管理人员可能就无法管理长沙区域分公司,在给角色分配数据权限时就可以将长沙区域分公司去除。
    2. 除数据权限外,我们还会遇到字段权限,比如:分公司C和分公司D都能看到上海区域分公司的客户情况,但是C看不到客户联系方式,D则能看到联系方式。如果有需要对字段权限进行控制,则可以在设置角色的数据权限或者功能权限时,进行控制。
    3. 题前有提到针对saas模式,可能存在一个角色在管理A跟B应用时可操作的数据权限时不一样的,可以在数据权限中增加一个高级设置权限,为不同的角色针对不用的应用进行分配数据操作。

    2. 用户操作体验

    平台类或者TO B内部产品,虽然不像C端为了留住用户追求极致用户体验,但是也需要确保在交互以及文字理解上面不会让用户产生疑惑情绪,培训成本也是开发成本的一环,尤其针对权限一块可能涉及业务功能复杂,如果在文字描述以及操作上在加大操作难度,可能无法估量的后果。

    3. 默认账号以及默认权限的设置

    对于ToB类或者平台类的产品,正常来讲都会有一个默认的超级管理员的角色以及角色对应的账号,否则系统内第一个角色谁来添加?默认权限的设置则根据需要进行设置,如果是不必要进行控制的权限,当然是可以设置为默认权限的。

    综上所述,根据以上的设计模式以及解决方案,已经能实现大部分企业90%的问题了,实际上很多企业并不需要做到这么小粒度的权限控制。

    展开全文
  • RBAC权限系统设计

    千次阅读 2019-06-17 21:52:26
    最近看了很多关于权限管理系统的产品设计的文章(RBAC模型,Role-Based Access Control 基于角色的访问控制),总结下自己认识的权限系统。 一、RBAC模型解释 先来look下图, 图意:通过角色关联用户,角色关联...

    最近看了很多关于权限管理系统的产品设计的文章(RBAC模型,Role-Based Access Control 基于角色的访问控制),总结下自己认识的权限系统。

    一、RBAC模型解释

    先来look下图,

    图意:通过角色关联用户,角色关联权限的方式间接赋予用户各种权限。

    用户:指使用此系统的所有人员

    角色:权限的集合。

     

     

    用户与角色之间是多对多的关系:1个用户可以允许拥有多个角色(权限取并集),同样1个角色可以分配给多个用户,所以 ,这里需要多一个用户角色关系表,主要是管理用户与角色之间的关系

     

     

     

    二、权限的定义

    权限:页面权限、操作权限(增删改查)、数据权限。

    a.页面权限:所有系统都是由一个个的页面组成,页面再组成模块,用户是否能看到这个页面的菜单、是否能进入这个页面就称为页面权限

    b.操作权限:用户在系统中的任何动作、交互,如增删改查

    c.数据权限:对数据私密性的要求:哪些人可以看到哪些数据,不可以看到哪些数据

     

    下面详细说下 数据权限,

    解析下上面的图意:业务经理、业务主管、业务员都可以出单(都有自己的订单),而他们的职级关系是业务经理下面有业务主管、业务主管下面有业务员

    而数据权限在这个地方的体现是:上级可以看到下级员工的数据,而不能看到 平级及其下级的员工数据。

     

    定义数据:

    1.业务员:仅可查看个人数据 (仅自己数据)

    2.主管:可查看自己的数据和自己旗下所有业务员的数据 (主管级别及下属数据)

    3.业务经理:可以查看自己的数据、自己旗下所有主管的数据及主管旗下所有业务员的数据 (经理级别及下属数据)

    4.老板:查看所有数据 (全部数据)

     

    三、产品设计

     

     

     

    展开全文
  • 基于员工管理权限系统的数据库设计完整版

    万次阅读 多人点赞 2018-07-02 20:31:36
    设计一个灵活、通用、方便的权限管理系统。 在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢?我们可以把这些资源简单概括为静态资源(功能操作、数据列)和动态资源(数据),也...
  • 数据权限系统

    万次阅读 2018-04-08 12:44:45
    在之前写过一篇关于菜单权限系统的设计,所以为了完善整个权限系统的模型,决定把数据权限也做一个总结。菜单权限管理系统目标实现对数据的权限控制。简单的来说,就是决定谁可以操作(增删改查)哪些数据。该权限...
  • php项目权限系统设计

    万次阅读 2017-09-08 12:13:51
    一个简单的B2B2C的权限系统
  •  公司可以存在上下级关系,这种关系仅限于展现形式,公司与公司之间没有权限继承,也就是说在授权管理中公司之间全部是扁平关系。公司的属性有以下内容: 属性 类型 公司编码 字符串 公司名称 字符串...
  • RBAC权限系统分析、设计与实现

    万次阅读 多人点赞 2019-06-28 09:15:35
    目前,使用最普遍的权限管理模型正是RBAC(Role-Based Access Control)模型,这篇文章也主要是介绍基于RBAC的权限管理系统,我会从RBAC是什么、如何设计RBAC两部分来介绍。 一、RBAC是什么 1、RBAC模型概述 RBAC...
  • 权限系统的设计

    万次阅读 2019-08-04 20:08:44
    权限系统设计 前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。 目前在...
  •  权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。  权限管理几乎出现在任何系统里面,只要有用户和密码的系统。 很多人常将“用户身份认证”、...
  • 除此之外,这套“中台系统”由于统一管理了企业内部各大应用系统的“菜单资源和操作权限”以及“应用系统之间通信时的统一授权”,故而难免需要涉及到“中台系统”与“中台子系统”、“中台子系统”与“中台子系统...
  • BPMS-通用权限系统快速开发框架

    千次下载 热门讨论 2013-12-16 18:34:06
    以满足不同系统用户的需求,将会浪费我们不少宝贵时间,所以花时间来设计一个相对通用的权限系统是很有意义的。 6、本框架根据RBAC模型的权限设计思想,建立权限管理系统的核心对象模型.对象模型中包含的基本元素...
  • 一个简单的权限系统模型

    千次阅读 2019-05-31 23:39:07
    我们知道,一般说的简单的权限系统,都是使用shiro或者spring-security shiro之前用的比较多,原理也容易理解,算是比较成熟的权限方面的框架 spring-security相对源码比较难懂,但由于与spring的完美融合,也有...
  • 可能是史上最全的权限系统设计

    千次阅读 2019-10-08 14:04:09
    权限系统设计 前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题。 目前在...
  • 权限系统表结构设计

    万次阅读 2018-03-09 19:52:37
    `type` int(11) NOT NULL DEFAULT 0 COMMENT '权限更新的类型,1:部门,2:用户,3:权限模块,4:权限,5:角色,6:角色用户关系,7:角色权限关系' , `target_id` int(11) NOT NULL COMMENT '基于type后指定的...
  • 基于资源的权限系统-数据库设计

    千次阅读 2018-01-04 11:33:30
    本通用权限管理系统是基于2棵树来做权限管理的,这2棵树就是资源树和组织树 组织+资源+动作 所组成的权限数据就是整个系统的核心。 这里之所以只用组织而不用人员,一方面可以减少权限数据的量,一方面还可以简化...
  • Django的用户模块与权限系统

    万次阅读 2018-01-30 21:37:47
    设计一个好的用户系统往往不是那么容易,Django提供的用户系统可以快速实现基本的功能,并可以在此基础上继续扩展以满足我们的需求。 先看看Django的用户系统都提供哪些功能: 提供用户模块(User Model) 权限验证...
  • Java通用权限系统管理(Spring+springMVC+ibatis+Angularjs)

    千次阅读 热门讨论 2016-11-09 17:20:28
    现在准备把自己做权限管理系统的经验与心得拿出来分享总结,然后在做一套自己的权限系统, 以后慢慢开源。打算采用Spring+springMVC+ibatis+Angularjs+bootstrap+ehCache来做。 RBAC权限模型: RBAC(...
  • 权限系统与RBAC模型概述[绝对经典]

    万次阅读 2016-09-18 18:05:03
    0. 前言 一年前,我负责的一个项目中需要权限管理。当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋。当时google了一些权限管理的资料,从中了解到...1. 权限系统与RBAC模型概述
  • 基于RBAC的saas权限系统设计

    万次阅读 2016-07-21 14:43:00
    在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。在一个组织中,角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相
  • 权限系统组织管理—详细设计说明书

    千次阅读 热门讨论 2016-02-27 21:51:04
    但是后来娥接手权限,我跟她说权限逻辑的时候,才发现很多东西在详细设计文档中都没有写出来,所以下一个人接手的话,又要跑来问好多逻辑的问题。每一次都要做很多重复性的工作。还有上次,做PB中期验收的毕业设计...
  • 权限管理系统源码合集【含数据库】

    千次下载 热门讨论 2012-11-20 08:02:35
    权限系统源码合集【含数据库】,很具有参考价值,推荐给大家。 struts2权限管理系统 通用权限管理系统设计篇.doc 固定资产管理系统项目 Jaoso新闻文章发布系统final+Struts+Spring+Hibernate java web 系统权限...
  • 包括图形展示、权限管理、用户管理等功能。 【后端技术】 技术 说明 Spring Boot2 MVC框架 开发的一站式解决方案 Spring Security5  认证和授权框架 MyBatisPlus3.3.1  基于 MyBatis&...
  • 43.Django权限系统auth模块详解

    万次阅读 多人点赞 2021-09-10 08:05:19
      如上图就是Django自带的auth系统对应的表,也就是存放了之前创建的超级用户信息的表(也也就是之前没有提及到的数据库迁移生成的表~) 注意点:上面所示表中有多对多表关系生成的中间表,而Django很人性化的...
  • 探讨Android 6.0及以上新权限系统的检测与处理

    千次阅读 热门讨论 2016-11-25 10:41:42
    从Google官方文档可知,Android系统升级到6.0后,它的权限系统被重新设计。相比原来新安装的APP系统会一次性授予所有权限和用户无法管理APP权限的不足,新的权限系统不再允许新安装的APP一次性获得所有权限,APP必须...
  • C#权限管理系统源代码

    热门讨论 2014-08-28 18:00:41
    分享下吧,好不容易搞到的权限管理及框架系统源代码,没有任何封装,很值得借鉴,vs2010+sql2005
  • 此篇文章主要尝试将世面上现有的一些权限系统设计做一下简单的总结分析,个人水平有限,如有错误请不吝指出。 术语 这里对后面会用到的词汇做一个说明,老司机请直接翻到常见设计模式。 用户 发起操作的主体。 ...
  • C#完整版权限管理系统

    热门讨论 2015-06-09 09:35:45
    C#,Jquery,EASYUI写得通用的权限管理系统,也是一个很漂亮,很实用的web应用程序框架!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,514,161
精华内容 605,664
关键字:

权限系统