rbac_rbac权限管理 - CSDN
精华内容
参与话题
  • RBAC用户、角色、权限、组设计方案

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

           在这个系统中,我们需要对系统的所有资源进行权限控制,那么系统中的资源包括哪些呢?我们可以把这些资源简单概括为静态资源(功能操作、数据列)和动态资源(数据),也分别称为对象资源和数据资源,后者是我们在系统设计与实现中的叫法。

    系统的目标就是对应用系统的所有对象资源和数据资源进行权限控制,比如应用系统的功能菜单、各个界面的按钮、数据显示的列以及各种行级数据进行权限的操控。

    三.相关对象及其关系

           大概理清了一下权限系统的相关概念,如下所示:

    1.       权限

    系统的所有权限信息。权限具有上下级关系,是一个树状的结构。下面来看一个例子

    系统管理

           用户管理

                  查看用户

                   新增用户

                        修改用户

                        删除用户

           对于上面的每个权限,又存在两种情况,一个是只是可访问,另一种是可授权,例如对于“查看用户”这个权限,如果用户只被授予“可访问”,那么他就不能将他所具有的这个权限分配给其他人。

    2.       用户

    应用系统的具体操作者,用户可以自己拥有权限信息,可以归属于0~n个角色,可属于0~n个组。他的权限集是自身具有的权限、所属的各角色具有的权限、所属的各组具有的权限的合集。它与权限、角色、组之间的关系都是n对n的关系。

    3.       角色

    为了对许多拥有相似权限的用户进行分类管理,定义了角色的概念,例如系统管理员、管理员、用户、访客等角色。角色具有上下级关系,可以形成树状视图,父级角色的权限是自身及它的所有子角色的权限的综合。父级角色的用户、父级角色的组同理可推。

    4.       组

    为了更好地管理用户,对用户进行分组归类,简称为用户分组。组也具有上下级关系,可以形成树状视图。在实际情况中,我们知道,组也可以具有自己的角色信息、权限信息。这让我想到我们的QQ用户群,一个群可以有多个用户,一个用户也可以加入多个群。每个群具有自己的权限信息。例如查看群共享。QQ群也可以具有自己的角色信息,例如普通群、高级群等。

    针对上面提出的四种类型的对象,让我们通过图来看看他们之间的关系。

     

        有上图中可以看出,这四者的关系很复杂,而实际的情况比这个图还要复杂,权限、角色、组都具有上下级关系,权限管理是应用系统中比较棘手的问题,要设计一个通用的权限管理系统,工作量也着实不小。

    当然对于有些项目,权限问题并不是那么复杂。有的只需要牵涉到权限和用户两种类型的对象,只需要给用户分配权限即可。

    在另一些情况中,引入了角色对象,例如基于角色的权限系统,只需要给角色分配权限,用户都隶属于角色,不需要单独为用户分配角色信息。

    通用权限管理设计篇(二)——数据库设计

       国庆前整的通用权限设计的数据库初步设计部分,现在贴上来。

    理清了对象关系之后,让我们接着来进行数据库的设计。在数据库建模时,对于N对N的

    关系,一般需要加入一个关联表来表示关联的两者的关系。初步估计一下,本系统至少需要十张表,分别为:权限表、用户表、角色表、组表、用户权限关联表、用

    户角色关联表、角色权限关联表、组权限关联表、组角色关联表、用户属组关联表。当然还可能引出一些相关的表。下面让我们在PowerDesigner中画出各表吧。

           各表及其关系如下:


          

    1.       用户表

    用户表(TUser)

    字段名称

    字段

    类型

    备注

    记录标识

    tu_id

    bigint

    pk, not null

    所属组织

    to_id

    bigint

    fk, not null

    登录帐号

    login_name

    varchar(64)

    not null

    用户密码

    password

    varchar(64)

    not null

    用户姓名

    vsername

    varchar(64)

    not null

    手机号

    mobile

    varchar(20)

     

    电子邮箱

    email

    varchar(64)

     

    创建时间

    gen_time

    datetime

    not null

    登录时间

    login_time

    datetime

     

    上次登录时间

    last_login_time

    datetime

     

    登录次数

    count

    bigint

    not null

    2.       角色表

    角色表(TRole)

    字段名称

    字段

    类型

    备注

    角色ID

    tr_id

    bigint

    pk, not null

    父级角色ID

    parent_tr_id

    bigint

    not null

    角色名称

    role_name

    varchar(64)

    not null

    创建时间

    gen_time

    datetime

    not null

    角色描述

    description

    varchar(200)

     

    3.       权限表

    权限表(TRight)

    字段名称

    字段

    类型

    备注

    权限ID

    tr_id

    bigint

    pk, not null

    父权限

    parent_tr_id

    bigint

    not null

    权限名称

    right_name

    varchar(64)

    not null

    权限描述

    description

    varchar(200)

     

    4.       组表

    组表(TGroup)

    字段名称

    字段

    类型

    备注

    组ID

    tg_id

    bigint

    pk, not null

    组名称

    group_name

    varchar(64)

    not null

    父组

    parent_tg_id

    bigint

    not null

    创建时间

    gen_time

    datetime

    not null

    组描述

    description

    varchar(200)

     

    5.       角色权限表

    角色权限表(TRoleRightRelation)

    字段名称

    字段

    类型

    备注

    记录标识

    trr_id

    bigint

    pk, not null

    角色

    Role_id

    bigint

    fk, not null

    权限

    right_id

    bigint

    fk, not null

    权限类型

    right_type

    int

    not null(0:可访问,1:可授权)

    6.       组权限表

    组权限表(TGroupRightRelation)

    字段名称

    字段

    类型

    备注

    记录标识

    tgr_id

    bigint

    pk, not null

    tg_id

    bigint

    fk, not null

    权限

    tr_id

    bigint

    fk, not null

    权限类型

    right_type

    int

    not null(0:可访问,1:可授权)

    7.       组角色表

    组角色表(TGroupRoleRelation)

    字段名称

    字段

    类型

    备注

    记录标识

    tgr_id

    bigint

    pk, not null

    tg_id

    bigint

    fk, not null

    角色

    tr_id

    bigint

    pk, not null

    8.       用户权限表

    用户权限表(TUserRightRelation)

    字段名称

    字段

    类型

    备注

    记录标识

    tur_id

    bigint

    pk, not null

    用户

    tu_id

    bigint

    fk, not null

    权限

    tr_id

    bigint

    fk, not null

    权限类型

    right_type

    int

    not null(0:可访问,1:可授权)

    9.       用户角色表

    用户角色表(TUserRoleRelation)

    字段名称

    字段

    类型

    备注

    记录标识

    tur_id

    bigint

    pk, not null

    用户

    tu_id

    bigint

    fk, not null

    角色

    tr_id

    bigint

    fk, not null

    10.   用户组表

    用户组表(TUserGroupRelation)

    字段名称

    字段

    类型

    备注

    记录标识

    tug_id

    bigint

    pk, not null

    用户

    tu_id

    bigint

    fk, not null

    tg_id

    bigint

    fk, not null

    11.   组织表

    组织表(TOrganization)

    字段名称

    字段

    类型

    备注

    组织id

    to_id

    bigint

    pk, not null

    父组

    parent_to_id

    bigint

    not null

    组织名称

    org_name

    varchar(64)

    not null

    创建时间

    gen_time

    datetime

    not null

    组织描述

    description

    varchar(200)

     

    12.   操作日志表

    操作日志表(TLog)

    字段名称

    字段

    类型

    备注

    日志ID

    log_id

    bigint

    pk, not null

    操作类型

    op_type

    int

    not null

    操作内容

    content

    varchar(200)

    not null

    操作人

    tu_id

    bigint

    fk, not null

    操作时间

    gen_time

    datetime

    not null





    1. 权限资源

    系统的所有权限信息。权限具有上下级关系,是一个树状的结构。下面来看一个例子

    系统管理

           用户管理

                  查看用户

                   新增用户

                   修改用户

                   删除用户

    对于上面的每个权限,又存在两种情况,一个是只是可访问,另一种是可授权,例如对于“查看用户”这个权限,如果用户只被授予“可访问”,那么他就不能将他所具有的这个权限分配给其他人。

    2. 用户

    应用系统的具体操作者,用户可以自己拥有权限信息,可以归属于0~n个角色,可属于0~n个组。他的权限集是自身具有的权限、所属的各角色具有的权限、所属的各组具有的权限的合集。它与权限、角色、组之间的关系都是n对n的关系。

    3. 角色

    为了对许多拥有相似权限的用户进行分类管理,定义了角色的概念,例如系统管理员、管理员、用户、访客等角色。角色具有上下级关系,可以形成树状视图,父级角色的权限是自身及它的所有子角色的权限的综合。父级角色的用户、父级角色的组同理可推。

    4. 组

    了更好地管理用户,对用户进行分组归类,简称为用户分组。组也具有上下级关系,可以形成树状视图。在实际情况中,我们知道,组也可以具有自己的角色信息、

    权限信息。这让我想到我们的QQ用户群,一个群可以有多个用户,一个用户也可以加入多个群。每个群具有自己的权限信息。例如查看群共享。QQ群也可以具有

    自己的角色信息,例如普通群、高级群等。

    针对如上提出的四种对象,我们可以整理得出它们之间的关系图,如下所示:

    总体设计思路是将系统分为组权限管理、角色权限管理、用户权限管理、组织管理和操作日志管理五部分。

    其中组权限管理包括包含用户、所属角色、组权限资源和组总权限资源四部分,某个组的权限信息可用公式表示:组权限 = 所属角色的权限合集 + 组自身的权限。

    角色权限管理包括包含用户、包含组和角色权限三部分,某个角色的权限的计算公式为:角色权限 = 角色自身权限。

    用户权限管理包括所属角色、所属组、用户权限、用户总权限资源和组织管理五部分。某个用户总的权限信息存在如下计算公式:用户权限 = 所属角色权限合集 + 所属组权限合集 + 用户自身权限。

    组织管理即对用户所属的组织进行管理,组织以树形结构展示,组织管理具有组织的增、删、改、查功能。

    操作日志管理用于管理本系统的操作日志。

    注意:因为组和角色都具有上下级关系,所以下级的组或角色的权限只能在自己的直属上级的权限中选择,下级的组或者角色的总的权限都不能大于直属上级的总权限。

    2.5 模块结构设计

    本系统的具有的功能模块结构如下图所示:

    2.6 尚未解决的问题

    无。

    3.      接口设计(暂略)

    3.1 用户接口(暂略)

    3.2 外部接口(暂略)

    3.3 内部接口(暂略)

    4.      界面总体设计

    本节将阐述用户界面的实现,在此之前对页面元素做如下约定:

    序号

    页面元素

    约定

    1

    按钮

    未选中时:[按钮名称]

    选中时:[按钮名称]

    2

    单选框

    ○ 选项

    3

    复选框

    □ 选项

    4

    下拉框

     [选项,…,] ▽

    5

    文本框

     |________|

    6

    TextArea

     |…………|

    7

    页签

    未选中时:选项名称

     选中时:选项名称

    8

    未选中链接

    链接文字

    9

    选中链接

    链接文字

    10

    说明信息

    说明信息

     

    4.1 组权限管理

    4.1.1包含用户

    组信息

       组1

           组11

           组12

           组…

       组2

           组21

           组22

           组…

     

    所选择组:组1

    [包含用户] [所属角色] [组权限] [总权限]

    [修改]

    用户名   姓名     手机号   最近登录时间 登录次数

    阿蜜果 谢星星 13666666666 2007-10-8    66

    sterning xxx    13555555555 2007-10-8    10 

    ……

    当用户选择“修改”按钮时,弹出用户列表,操作人可以通过勾选或取消勾选来修改该组所包含的用户。

    4.1.2所属角色

    组信息

       组1

           组11

           组12

           组…

       组2

           组21

           组22

           组…

     

    所选择组:组1

    [包含用户] [所属角色] [组权限] [总权限]

    [修改]

    角色ID   角色名称   角色描述

    1          访客       --

       2         初级用户    --

      

    当用户选择“修改”按钮时,弹出角色树形结构,操作人可以通过勾选或取消勾选来修改该组所属的角色。

    4.1.3组权限

    组信息

       组1

           组11

           组12

           组…

       组2

           组21

           组22

           组…

     

    所选择组:组1

    [包含用户] [所属角色] [组权限] [总权限]

                    [保存] [取消]

    4.1.4总权限

    组信息

       组1

           组11

           组12

           组…

       组2

           组21

           组22

           组…

     

    所选择组:组1

    [包含用户] [所属角色] [组权限] [总权限]

                    [保存] [取消]

    通过对已具有的权限取消勾选,或为某权限添加勾选,来修改组的权限信息,点击“保存”按钮保存修改信息。

    4.1.5组管理

           在下图中,选中组1的时候,右键点击可弹出组的操作列表,包括添加、删除和修改按钮,从而完成在该组下添加子组,删除该组以及修改该组的功能。

    组信息

       组1

           组11

           组12

           组…

       组2

           组21

           组22

           组…

     

    所选择组:组1

    [包含用户] [所属角色] [组权限] [总权限]

    [修改]

    用户名   姓名     手机号   最近登录时间 登录次数

    阿蜜果 谢星星 13666666666 2007-10-8    66

    sterning xxx    13555555555 2007-10-8    10 

    ……

    4.2 角色权限管理

    4.2.1包含用户

    角色信息

       角色1

           角色11

           角色12

           角色…

       角色2

           角色21

           角色22

           角色…

     

    所选择角色:角色1

    [包含用户] [包含组] [角色权限]

    [修改]

    用户名   姓名     手机号   最近登录时间 登录次数

    阿蜜果 谢星星 13666666666 2007-10-8    66

    sterning xxx    13555555555 2007-10-8    10 

    ……

    当用户选择“修改”按钮时,弹出用户列表,操作人可以通过勾选或取消勾选来修改该角色所包含的用户。

    4.2.2包含组

    角色信息

       角色1

           角色11

           角色12

           角色…

       角色2

           角色21

           角色22

           角色…

     

    所选择角色:角色1

    [包含用户] [包含组] [角色权限]

    [修改]

    组ID   组名称     组描述

    1      xxx1       --

    2       xxx2        -- 

    ……

    当用户选择“修改”按钮时,弹出用户列表,操作人可以通过勾选或取消勾选来修改该角色所包含的组。

    4.2.3角色权限

    角色信息

       角色1

           角色11

           角色12

           角色…

       角色2

           角色21

           角色22

           角色…

     

    所选择角色:角色1

    [包含用户] [包含组] [角色权限]

                     

                   [保存] [取消]

    通过对已具有的权限取消勾选,或为某权限添加勾选,来修改角色的权限信息,点击“保存”按钮保存修改信息。

    4.2.4管理角色

           在下图中,选中组1的时候,右键点击可弹出组的操作列表,包括添加、删除和修改按钮,从而完成在该组下添加子组,删除该组以及修改该组的功能。

    角色信息

       角色1

           角色11

           角色12

           角色…

       角色2

           角色21

           角色22

           角色…

     

    所选择角色:角色1

    [包含用户] [包含组] [角色权限]

    [修改]

    用户名   姓名     手机号   最近登录时间 登录次数

    阿蜜果 谢星星 13666666666 2007-10-8    66

    sterning xxx    13555555555 2007-10-8    10 

    ……

    4.3 用户权限管理

    4.3.1所属角色

    用户权限信息

    xx公司

       广州分公司

           阿蜜果

           肖xx

           yy…

       北京分公司

           zz1

           zz2

           zz3…

     

    所选择用户:阿蜜果

    [所属角色] [所属组] [用户权限] [总权限]

    [修改]

    角色ID   角色名称   角色描述

    1          访客       --

       2         初级用户    --

    当用户选择“修改”按钮时,弹出角色树形结构,操作人可以通过勾选或取消勾选来修改该用户所属的角色。

    4.3.2所属组

    用户信息

    xx公司

       广州分公司

           阿蜜果

           肖xx

           yy…

       北京分公司

           zz1

           zz2

           zz3…

     

    所选择用户:阿蜜果

    [所属角色] [所属组] [用户权限] [总权限]

    [修改]

    组ID   组名称     组描述

    1       组1         --

       2       组2         --

    当用户选择“修改”按钮时,弹出组的树形结构,操作人可以通过勾选或取消勾选来修改该用户所属的组。

    4.3.3用户权限

    用户信息

    xx公司

       广州分公司

           阿蜜果

           肖xx

           yy…

       北京分公司

           zz1

           zz2

           zz3…

     

    所选择用户:阿蜜果

    [所属角色] [所属组] [用户权限] [总权限]

                     

                    [保存] [取消]

    通过对已具有的权限取消勾选,或为某权限添加勾选,来修改用户的权限信息,点击“保存”按钮保存修改信息。

    4.3.4总权限

    用户信息

    xx公司

       广州分公司

           阿蜜果

           肖xx

           yy…

       北京分公司

           zz1

           zz2

           zz3…

     

    所选择用户:阿蜜果

    [所属角色] [所属组] [用户权限] [总权限]

                     

                    [保存] [取消]

    通过对已具有的权限取消勾选,或为某权限添加勾选,来修改用户的权限信息,点击“保存”按钮保存修改信息。

    4.3.5用户管理

           当选择了某用户时,点击右键,弹出菜单列表:修改、删除、取消,点击修改和删除按钮可以实现用户的删除和修改功能。

           选择某个组织,例如下表中的“广州分公司”,弹出菜单列表:添加子组织、删除组织、修改组织、添加用户、取消,点击添加用户按钮可以实现用户的添加功能。

    用户权限信息

    xx公司

       广州分公司

           阿蜜果

           肖xx

           yy…

       北京分公司

           zz1

           zz2

           zz3…

     

    所选择用户:阿蜜果

    [所属角色] [所属组] [用户权限] [总权限]

    [修改]

    角色ID   角色名称   角色描述

    1          访客       --

       2         初级用户    --

    4.3.6组织管理

           选择某个组织,例如下表中的“广州分公司”,弹出菜单列表:添加子组织、删除组织、修改组织、添加用户、取消,点击添加子组织、删除组织、修改组织按钮可以实现组织的添加、删除和修改功能。

    用户权限信息

    xx公司

       广州分公司

           阿蜜果

           肖xx

           yy…

       北京分公司

           zz1

           zz2

           zz3…

     

    所选择用户:阿蜜果

    [所属角色] [所属组] [用户权限] [总权限]

    [修改]

    角色ID   角色名称   角色描述

    1          访客       --

       2         初级用户    --

    4.4 操作日志管理

    4.4.1查询操作日志

    操作名称:|________|  操作人:|________|

    操作时间从 |________| 到 |________| [查询] [重置] [删除]

    编号    操作名称    操作内容    操作人    操作时间

    1        xx1         --        Amigo    2007-10-8

    2        xx2         --        xxyy     2007-10-8

    输入上图表单中的查询信息后,点击“查询”按钮,可查询出符合条件的信息。

    4.4.2删除操作日志

    操作名称:|________| 操作人:|________|

    操作时间从 |________| 到 |________| [查询] [重置] [删除]

    编号    操作名称    操作内容    操作人    操作时间

    1        xx1       --           Amigo      2007-10-8

    2        xx2       --           xxyy       2007-10-8

    输入上图表单中的查询信息后,点击“查询”按钮,可查询出符合条件的信息。而后点击“删除”按钮,可删除符合查询条件的操作日志。

    5.      数据结构设计

    数据库设计的模型请参见《通用权限管理系统_数据库模型.pdm》。表的说明请参见《通用权限管理系统数据库设计说明书》。

    5.1 设计原则

    5.1.1命名的规范

    数据库中表、主键、外键、索引的命名都以统一的规则,采用大小写敏感的形式,各种对象命名长度不要超过30个字符,这样便于应用系统适应不同的数据库平台。

    5.1.2数据的一致性和完整性

    为了保证数据库的一致性和完整性,往往通过表间关联的方式来尽可能的降低数据的冗余。表间关联是一种强制性措施,建立后,对父表(Parent Table)和子表(Child Table)的插入、更新、删除操作均要占用系统的开销。如果数据冗余低,数据的完整性容易得到保证,但增加了表间连接查询的操作,为了提高系统的响应时间,合理的数据冗余也是必要的。使用规则(Rule)和约束(Check)来防止系统操作人员误输入造成数据的错误是设计人员的另一种常用手段,但是,不必要的规则和约束也会占用系统的不必要开销,需要注意的是,约束对数据的有效性验证要比规则快。所有这些,需要在设计阶段应根据系统操作的类型、频度加以均衡考虑。

    5.2 数据库环境说明

    数据库:MySql5.0

    设计库建模工具:PowerDesigner12.0

    5.3 数据库命名规则

    表名以T开头,外键以FK开头,索引以INDEX开头。

    5.4 逻辑结构

    pdm文件的名称为:《通用权限管理系统_数据库模型》。

    5.5 物理存储

    通过数据库建模工具PowerDesigner12可以将pdm导出为文本文件,将数据库脚本放入文本文件中保存。

    5.6 数据备份和恢复

    数据库需定期备份(每天备份一次),备份文件格式为backup_yyyyMMdd,数据库被破坏时,利用最新的备份文件进行恢复。

    6.      系统出错处理设计

    6.1 出错信息

    错误分类

    子项及其编码

    错误名称

    错误代码

    备注

    数据库错误

    连接

    连接超时

    100001001

     

    连接断开

    100001002

     

    数据库本身错误代码

    数据库本身错误代码

    100002+数据库错误代码

     

    TCP连接错误

    连接

    连接超时

    101001001

     

    连接断开

    101001002

     

    其它TCP连接错误(socket自身错误代码)

     

    101002+ socket错误代码

     

    配置信息错误

    未配置输入参数

     

    102001

     

    未配置输出参数

     

    102002

     

    组管理部分自定义错误

      

    103001——103999

     

    角色管理部分自定义错误

      

    104001——104999

     

    用户管理部分自定义错误

      

    105001——105999

     

    操作日志管理

      

    106001——106999

     

    6.2 补救措施

    为了当某些故障发生时,对系统进行及时的补救,提供如下补救措施:

    a.后备技术   定期对数据库信息进行备份(每天一次),当数据库因某种原因被破坏时,以最新的数据库脚本进行恢复;。

    7.      系统安全设计

    7.1 数据传输安全性设计

    SSH可以通过将联机的封包加密的技术进行资料的传递; 使用SSH可以把传输的所有数据进行加密,即使有人截获到数据也无法得到有用的信息。同时数据经过压缩,大大地加快了传输的速度。通过SSH的使用,可以确保资料传输比较安全并且传输效率较高。

    7.2 应用系统安全性设计

    操作人的操作信息需要提供操作记录。对系统的异常信息需进行记录,已备以后查看。只有授权用户才能登录系统,对于某个操作,需要具有相应权限才能进行操作。

    7.3 数据存储安全性设计           

    对于用户的密码等敏感信息采用MD5进行加密。

    展开全文
  • 权限管理——RBAC模型总结

    万次阅读 多人点赞 2014-04-07 21:14:14
    权限管理,这是每个软件系统都会涉及到的,而且权限管理的需求本质往往都是一样,无在乎怎么的角色拥有怎样的权限,只要你充当了这个角色,你就拥有了这些功能。   举个简单例子:一个老师在学校教室她就拥有教书...

             权限管理,这是每个软件系统都会涉及到的,而且权限管理的需求本质往往都是一样,无在乎怎么的角色拥有怎样的权限,只要你充当了这个角色,你就拥有了这些功能。


            举个简单例子:一个老师在学校教室她就拥有教书育人的权利义务,一个丈夫在家就有呵护妻子支撑家庭的权利义务,而一个父亲在孩子面前就有保护孩子,教育孩子的权利义务……而作为一个男生,我们很可能在不同的场所,成为这些角色,从而拥有了这些权利义务。而抽象出来就是用户,角色和权利三个方面。


             所以经过前人对权限方面的总结抽象,总结出来RBAC(Role-Based Access Control )基于角色的访问控制。在以前做项目的时候,就听组长说权限管理模型的运用,但是自己但是只是接触了一下,直到后来在项目中真正的使用,才对此有深刻的理解。


               RBAC认为授权实际就是who,what,how三者之间的关系,即whowhat进行how的操作。Who,权限的拥用者或主体(如Principal、User、Group、Role、Actor等等);what,权限针对的对象或资源(Resource、Class) ;How,具体的权限(Privilege,正向授权与负向授权)。简单一点说吧就是,我们通过给角色授权,然后将附有权利的角色施加到某个用户身上,这样用户就可以实施相应的权利了。通过中间角色的身份,是权限管理更加灵活:角色的权利可以灵活改变,用户的角色的身份可以随着场所的不同而发生改变等。这样这套RBAC就几乎可以运用到所有的权限管理的模块上了。

     

           好,看一下RBAC的分类吧:

            1,核心RABC0:这是权限管理的核心部分,其他的版本都是建立在0的基础上的,看一下类图:




              通常情况下,RBAC0模型就可以解决权限模型,是最通用的。图中描述了,1,用户和角色是多对多的关系,表示一个用户在不同的场景下可以拥有不同的角色,例如项目经理也可以是项目架构师等;当然了一个角色可以给多个用户,例如一个项目中有多个组长,多个组员等。这里需要提出的是,将用户和许可进行分离,是彼此相互独立,使权限的授权认证更加灵活。2,角色和许可(权限)是多对多的关系,表示角色可以拥有多分权利,同一个权利可以授给多个角色都是非常容易理解的,想想现实生活中,当官的级别不同的权限的情景,其实这个模型就是对权限这方面的一个抽象,联系生活理解就非常容易了。


            在项目中开发中我们正是使用这种最简单,但是却最通用的权限模型。这里想提一下我们建数据库表,我们用了五张表来实现这个权限模型,将其中的两个多对多分解成了两对多对一来完成,这样更有利于我们维护表,感觉也更加简单,更容易控制。看下边看一下我们表的设计吧:



              这样,我们项目中就用五张表来进行权限方面的管理了,在用户表中保存用户,角色表中保存角色级别,许可表中保存各种权限信息,然后通过中间表,来维护彼此之间的关系。这样就完成了权限的管理了。

     

            2RBAC1,基于RBAC0模型,进行了角色的分层,也就是说角色上有了上下级的区别,存在了继承包含关系,也就是前边说过的适合于用树展现的哪种自关联的结构,这种模型合适于角色之间的层次明确,包含明确。但是认为用第一种模型也是可以的,只不过第一种可能会有数据冗余,没有这种更加面向对象化而已。



              3RBAC2,也是基于RBAC0模型的基础上,进行了角色的访问控制。a,RBAC2中的一个基本限制时互斥角色的限制,互斥角色是指各自权限互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。常举的例子:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色;b,是指角色的权利权利是有限的,用户有用的角色也是有限的,当然分配用户时也是有限的,不能进行无限制的分配用户,例如公司的领导人有限的;c,是指要想获得较高的权限,要首先拥有低一级的权限。就像我们生活中,国家主席是从副主席中选举的一样。看一下它的类图吧:


              4RBAC3,也就是最全面级的权限管理,它是基于RBAC0的基础上,将RBAC1RBAC2进行整合了,最前面,也最复杂的:



               综上为权限管理模型的相关介绍,其实在任何系统中都会涉及到权限管理的模块,无论复杂简单,我们都可以通过以RBAC模型为基础,进行相关灵活运用来解决我们的问题。



    展开全文
  • RBAC简介

    千次阅读 2019-09-18 19:54:40
    目录RBAC简介RBAC0RBAC1RBAC2RBAC3 RBAC简介 RBAC是Role Based Access Control的英文缩写,意思是基于角色访问控制。 RBAC实际上就是针对产品去发掘需求时所用到的Who(角色)、What(拥有什么资源)、How(有哪些...

    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的全部特点,同时将角色继承关系和约束条件关系两者都融入到模型中。

    展开全文
  • 基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有...在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。
  • RBAC权限实战项目

    千人学习 2018-10-22 21:38:15
    本视频讲授RBAC权限模型的设计、以及在项目中的应用 。 1. 使用Maven进行项目构建 。 2. 页面设计采用响应式前端框架BootStrap 。 3. 采用多种方式展现用户数据:树形结构(ztree)、图表(echarts) 等 。 4. ...
  • RBAC

    2019-09-16 21:54:54
    1.什么是RBAC (1)请简述什么是RBAC RBAC即是基于角色的访问控制 2.RBAC96模型介绍 (1)什么是RBAC96模型,还有别的模型吗,分别是什么? RBAC96 模型家族,其中包括了 RBAC0~RBAC3 四个概念模型。 定义了能构成一个 RBAC ...

    1.什么是RBAC

    (1)请简述什么是RBAC
    RBAC即是基于角色的访问控制

    2.RBAC96模型介绍

    (1)什么是RBAC96模型,还有别的模型吗,分别是什么?
    RBAC96 模型家族,其中包括了 RBAC0~RBAC3 四个概念模型。
    定义了能构成一个 RBAC 控制系统的最小的元素集合,RBAC 之中,包含用户 users(USERS)、角色 roles(ROLES)、目标 objects(OBS)、操作 operations(OPS)、许可权 permissions(PRMS)五个基本数据元素,权限被赋予角色,而不是用户,当一个角色被指定给一个用户时,此用户就拥有了该角色所包含的权限。会话 sessions是用户与激活的角色集合之间的映射。RBAC0 与传统访问控制的差别在于增加一层间接性带来了灵活性,RBAC1、 RBAC2、RBAC3 都是先后在 RBAC0 上的扩展

    3.RBAC实战-需求分析和数据库设计

    (1)简述为何要这么设计表结构
    为了更好的规范数据库,通过数据库的设计可以更清晰的展示各个表之间的联系

    4.RBAC实战-创建表

    (1)将设计好的数据库表贴到下面

    CREATETABLE`users`( `username`varchar(50)NOTNULL, `userpwd`varchar(50)DEFAULTNULL, `role_id`int(11)DEFAULTNULL, PRIMARYKEY(`username`), KEY`users_fk`(`role_id`), CONSTRAINT`users_fk`FOREIGN KEY(`role_id`)REFERENCES`roles`(`roleid`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
    
    
    CREATETABLE`roles`( `roleid`int(11)NOTNULLAUTO_INCREMENT, `rolename`varchar(50)DEFAULTNULL, PRIMARYKEY(`roleid`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
    
    
    CREATETABLE`menus`( `menuid`int(11)NOTNULLAUTO_INCREMENT,
    `menuname`varchar(50)DEFAULTNULL, `menuurl`varchar(50)DEFAULTNULL, `fatherid`int(11)DEFAULTNULL, PRIMARYKEY(`menuid`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
    
    CREATETABLE`funs`( `funid`int(11)NOTNULLAUTO_INCREMENT, `funname`varchar(50)DEFAULTNULL, `funurl`varchar(50)DEFAULTNULL, `menu_id`int(11)DEFAULTNULL, PRIMARYKEY(`funid`), KEY`menus_fk`(`menu_id`), CONSTRAINT `menus_fk` FOREIGN KEY (`menu_id`) REFERENCES `menus` (`menuid`) )ENGINE=InnoDBDEFAULTCHARSET=utf8
    CREATETABLE`roles_menus`( `roles_id`int(11)NOTNULL, `menus_id`int(11)NOTNULL, PRIMARYKEY(`roles_id`,`menus_id`), KEY`roles_menus_fk2`(`menus_id`), CONSTRAINT `roles_menus_fk1` FOREIGN KEY (`roles_id`) REFERENCES `roles` (`roleid`), CONSTRAINT `roles_menus_fk2` FOREIGN KEY(`menus_id`) REFERENCES `menus` (`menuid`) )ENGINE=InnoDBDEFAULTCHARSET=utf8;
    

    5.RBAC实战-添加基础数据

    (1)根据课堂内容将基础数据添加到表中,并简述什么是基础数据
    添加数据如上图所示
    所谓的基础数据即是系统运行时最底层的数据,是系统在初始化时就一个具备的内容

    6.RBAC实战-ssm整合

    (1)再次从零开始整合一下ssm框架

    7.RBAC实战-创建pojo

    (1)将创建好的pojo贴到下面,并解释类与类之间的关系.每个类中的属性分别是什么意思

    public class Users 
    { 
    private String username;
     private String userpwd; 
    private Roles roles;
    public Roles getRoles() {
     return roles;
     } 
    public void setRoles(Roles roles)
     { this.roles = roles;
    } 
    public String getUsername() { return username; }
     public void setUsername(String username)
     { this.username = username; } 
    public String getUserpwd() { return userpwd; } 
    public void setUserpwd(String userpwd)
     { this.userpwd = userpwd; }
    }
    
    public class Roles {
     private int roleid; 
    private String rolename; 
    private List<Menus> menus = new ArrayList<>();
    public List<Menus> getMenus() { return menus; } 
    public void setMenus(List<Menus> menus) { this.menus = menus; }
     public int getRoleid() { return roleid; }
     public void setRoleid(int roleid) { this.roleid = roleid; }
     public String getRolename() { return rolename; } 
    public void setRolename(String rolename) { this.rolename = rolename; }
    }
    public class Menus {
    private int menuid; 
    private String menuname;
     private String menuurl; 
    private int fatherid;
     private List<Funs> funs = new ArrayList<>();
     public List<Funs> getFuns() { return funs; } 
    public void setFuns(List<Funs> funs) { this.funs = funs; } 
    public int getMenuid() { return menuid; } 
    public void setMenuid(int menuid) { this.menuid = menuid; } 
    public String getMenuname() { return menuname;
    } 
    public void setMenuname(String menuname) { this.menuname = menuname; }
     public String getMenuurl() { return menuurl; } 
    public void setMenuurl(String menuurl) { this.menuurl = menuurl; }
     public int getFatherid() { return fatherid; }
     public void setFatherid(int fatherid) { this.fatherid = fatherid; }
    }
    
    public class Funs {
    private int funid;
    private String funname;
     private String funurl; 
    public int getFunid() { return funid; }
     public void setFunid(int funid) { this.funid = funid; } 
    public String getFunname() { return funname; }
     public void setFunname(String funname) { this.funname = funname; } 
    public String getFunurl() { return funurl; } 
    public void setFunurl(String funurl) { this.funurl = funurl; }
    }
    

    8.RBAC实战-定义resultMap

    (1)视频中定义resultMap的意义是什么?
    我们在查询结果集时候,用的是多表关联查询,所以我们返回值必须是一个map来封装我们查询的结果

    9.RBAC实战-用户登录(对应视频100-101)

    (1)用户在登录的时候,后台做了哪些业务逻辑处理
    根据username先去查询数据库,如果查询到用户,我们在取出返回值的密码,与用户输入的密码是否一致,如果一致返回user,如果密码不一致,就抛出异常,返回密码有误,或用户名有误

    10.RBAC实战-页面显示(对应视频102-104)

    (1)贴出首页布局的代码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title> 
    </head>
     <frameset rows="15%,*,10%" border="1"> 
    <frame src="head" scrolling="no" name="head"> <frameset cols="20%,*"> 
    <frame src="menu" scrolling="auto" name="menu">
     <frame src="body" scrolling="auto" name="body"> 
    </frameset> <frame src="foot" scrolling="auto" name="foot">
     </html>
    

    (2)什么是Dtree,如何使用Dtree,后台需要注意什么?
    首先引入js和css文件
    然后创建form表单
    (3)如何在页面中显示树形菜单?
    使用add方法

    11.RBAC实战-创建用户是否登录Filter

    (1)为什么要检测用户是否登录?
    为了防止用户不登录也能访问首页问题
    (2)简述Filter的检测逻辑是什么
    如果用户访问的是登录页面,放行
    如果访问的不是登录页面,我们先从session中获取数据,判断是否登录,如果session中取出数据则可以放行,如果不能,则重定向到登录页面

    12.RBAC实战-什么是越级访问

    (1)简述什么是越级访问,如何改善?
    通过浏览器地址栏访问越级的功能。使用RBAC的控制对象功能

    13.RBAC实战-录入资源管理基础数据

    (1)将课堂上的代码敲一遍

    14.RBAC实战-查询资源

    (1)将课堂上的代码敲一遍,简述如何查询资源,后台的业务逻辑是如何的.
    使用多表连接查询实现同过用户名查找对于的角菜单、功能等信息。查找到的数据封装进user对象中。

    15.RBAC实战-创建权限过滤器

    (1)创建权限过滤器的意义是什么?权限过滤器的业务逻辑是如何的?
    判断当前用户是否有权限访问该资源,避免用户的越级访问。
    先对静态资源放行,在对用户登录的资源进行放行,再判断当前访问的uri是否在用户的权限之内。使用for循环遍历user对象中存储的功能信息,判断当前uri与功能是否匹配。匹配则放行。不匹配则提示权限不足。

    展开全文
  • RBAC介绍

    2019-04-21 20:48:47
    RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中...
  • 权限系统与RBAC模型概述[绝对经典]

    万次阅读 2018-08-03 11:37:06
    当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋。当时google了一些权限管理的资料,从中了解到早就有了RBAC这个东西。可惜一直没狠下心来学习。 更详细的RBAC模型非常复杂。...
  • RBAC权限模型——项目实战

    万次阅读 多人点赞 2015-07-02 15:04:38
    这篇文章我们将RBAC权限模型的4种设计思想进行了介绍,接下来我将我们自己项目中的权限模型进行了详细的介绍,最后还针对我们当前的权限模型提出了自己的一点想法。
  • RBAC权限模型

    千次阅读 2019-06-01 12:08:05
    RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予...
  • 结合shiro的RBAC

    千次阅读 2014-08-12 16:31:46
    shiro本身的"RESOURCE:OPERATION"方式与RBAC模式结合比较方便。 fa
  • 基于角色的访问控制(RBAC)介绍

    万次阅读 2011-03-07 15:16:00
    企业环境中的访问控制策略一般有三种:自主型访问控制方法、强制型访问控制方法和基于角色的访问控制方法(RBAC)。其中,自主式太弱,强制式太强,二者工作量大,不便于管理。基于角色的访问控制方法是目前公认的...
  • RBAC(Role-Based Access Control, 基于角色访问控制) 原理及设计逻辑参考:点击打开链接项目地址:GitHub:点击打开链接项目介绍:1、基于 SpringBoot 2、基于 JWT 实现前后分离,Spring Security 安全控制3、前端...
  • RBAC权限系统分析、设计与实现

    千次阅读 2019-06-28 09:15:35
    最近,因为项目上需要设计实现一个权限管理模块,所以专门整理总结了RBAC的一些知识。 目前,使用最普遍的权限管理模型正是RBAC(Role-Based Access Control)模型,这篇文章也主要是介绍基于RBAC的权限管理系统,...
  • RBAC vs ABAC

    千次阅读 2017-06-06 20:01:58
    目前 Kubernetes 中有一系列的鉴权机制。 ...鉴权的作用是,决定一个用户是否有权使用 Kubernetes API 做某些事情。它除了会影响 kubectl 等组件之外,还会对一些运行在集群内部并对集群进行操作的软件产生作用,例如...
  • Java笔记--权限管理(RBAC

    千次阅读 2016-02-26 10:03:16
    (一)RBAC( Role-Based Access Control):基于角色的访问控制 RBAC支持三个著名的安全原则:最小权限原则,责任分离原则和数据抽象原则。 RBAC的基本思想是:授权给用户的访问权限,通常由用户在一个组织中担当的...
  • RBAC最少需要几张表,简述实现原理

    千次阅读 2018-03-01 20:52:27
    RBAC0RBAC0是RBAC中的基础模型,后续的模型都是RBAC0的改进RBAC0引入了角色概念来解决用户与权限之间的分离问题,用户实际上没有权限,而只有给用户赋予某种角色之后,才拥有相应的权限.RBAC0主要解决了权限的分离问题...
  • 访问控制模型ACL和RBAC

    万次阅读 2011-07-20 18:03:19
    1.ACL ACL是最早也是最基本的一种访问控制机制,它的原理非常简单:每一项资源,都配有一个列表,这个列表记录的就是哪些用户可以对这项资源执行CRUD中的那些操作。当系统试图访问这项资源时,会首先检查这个列表中...
  • 权限系统与RBAC模型

    万次阅读 2020-10-15 20:32:35
    限系统与 RBAC 模型概述、RBAC 模型简述和实用的 RBAC 模型的数据库建模
  • TP5.0实现RBAC权限设计

    千次阅读 2018-06-03 14:56:02
    TP5.0实现RBAC权限设计 导语: 在开发管理后台时,常常需要针对某类用户,赋予某种操作的权限,而RBAC模型通过构建“用户-角色-权限-资源”的授权模型,解决了给用户操作分配权限的问题。 RBAC模型 概述...
1 2 3 4 5 ... 20
收藏数 22,241
精华内容 8,896
关键字:

rbac