RBAC模型的通用权限管理系统的设计

合集下载

rbac的权限管理体系

rbac的权限管理体系

rbac的权限管理体系基于角色的访问控制(Role-Based Access Control,RBAC)是一种权限管理体系,它旨在确保只有经过授权的用户能够访问特定的资源。

RBAC系统通过定义角色、权限和用户之间的关系来实现对系统资源的访问控制。

首先,让我们来看一下RBAC系统的核心组成部分。

RBAC系统包括以下几个主要元素:1. 角色(Role),角色是一组权限的集合。

它们代表了用户在组织中的职能或者责任。

例如,一个角色可以是“管理员”、“编辑”或者“查看者”。

2. 权限(Permission),权限是指用户或者角色被允许执行的操作或者访问的资源。

例如,权限可以包括“创建用户”、“编辑文章”或者“查看报表”。

3. 用户(User),用户是系统中的实体,他们被分配到一个或多个角色,并且通过这些角色获得相应的权限。

RBAC系统的工作原理如下:首先,管理员或者安全专家定义系统中的角色,并且将权限分配给这些角色。

然后,用户被分配到一个或多个角色,从而获得了与这些角色相关联的权限。

这种方式简化了权限管理,因为管理员只需要管理角色和角色之间的关系,而不需要为每个用户单独分配权限。

RBAC系统的优点包括:1. 简化权限管理,通过角色的方式管理权限,减少了权限分配的复杂性,提高了管理效率。

2. 增强安全性,RBAC系统可以确保用户只能访问他们所需的资源,从而减少了系统被未经授权的访问的风险。

3. 支持审计和合规性,RBAC系统可以记录用户被授予的角色和权限,从而支持审计和合规性要求。

然而,RBAC系统也存在一些挑战,例如角色的管理可能会变得复杂,特别是在大型组织中。

此外,RBAC系统可能无法应对一些灵活的权限管理需求,比如临时授权或者特殊情况下的权限调整。

总的来说,RBAC系统是一种强大的权限管理体系,它通过角色的方式简化了权限管理,并且提高了系统的安全性和合规性。

然而,在实际应用中,需要根据具体的业务需求和组织结构来灵活地设计和实施RBAC系统。

基于RBAC的权限管理系统设计

基于RBAC的权限管理系统设计

基于RBAC的权限管理系统设计RBAC(Role-Based Access Control)是一种基于角色的访问控制模型,它的核心思想是将权限与角色关联起来,然后将角色分配给用户。

基于RBAC的权限管理系统可以极大地提高系统的安全性和管理效率。

下面是设计一个基于RBAC的权限管理系统需要考虑的几个关键点。

1. 角色设计首先需要设计角色,角色应该具有一定的可维护性和可扩展性。

角色设计时应该根据实际业务需求进行,具体可能包括管理员、普通用户、财务人员等。

每种角色应该有其对应的权限集合,可以通过权限清单进行定义。

2. 权限管理权限管理是基于RBAC的一个核心环节。

在系统中应该定义一套权限体系,并将这些权限与角色进行关联。

权限体系应该具有可维护性和可扩展性,可以针对不同的角色进行权限划分。

3. 用户管理在RBAC模型中,用户和角色是一一对应的关系,因此需要对用户进行管理,包括用户的创建、删除和角色的分配等。

在为用户分配角色时,需要考虑到用户的实际需求,确保用户具有所需的权限。

4. 安全性管理在设计时,需要考虑安全性管理,包括对角色的分配和管理进行限制,防止用户滥用权限。

此外还需要对敏感数据进行加密保护,可以通过网络传输加密、数据库加密等方式。

5. 日志管理在系统运行过程中,需要对用户的操作进行记录,包括用户的登录、退出、权限变更、操作记录等。

这些日志可以用于审计和故障排查,同时也可以用于对违规行为的发现和处理。

综合以上几点,一个基于RBAC的权限管理系统的设计应该包括角色设计、权限管理、用户管理、安全性管理和日志管理等模块。

实现这些模块需要结合实际业务需求、技术实现、用户体验等多个方面进行考虑。

RBAC 用户角色权限设计方案(非常好)

RBAC  用户角色权限设计方案(非常好)

扩展RBAC用户角色权限设计方案RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。

简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。

这样,就构造成“用户-角色-权限”的授权模型。

在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。

(如下图).1角色是什么?可以理解为一定数量的权限的集合,权限的载体。

例如:一个论坛系统,“超级管理员”、“版主”都是角色。

版主可管理版内的帖子、可管理版内的用户等,这些是权限。

要给某个用户授予这些权限,不需要直接将权限授予用户,可将“版主”这个角色赋予该用户。

.2当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。

这时,就需要给用户分组,每个用户组内有多个用户。

除了可给用户授权外,还可以给用户组授权。

这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。

(下图为用户组、用户与角色三者的关联关系).3.4在应用系统中,权限表现成什么?对功能模块的操作,对上传文件的删改,菜单的访问,甚至页面上某个按钮、某个图片的可见性控制,都可属于权限的范畴。

有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成“用户-角色-权限-资源”的授权模型。

而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联,这样可能更具便捷性和易扩展性。

(见下图).5.6请留意权限表中有一列“权限类型”,我们根据它的取值来区分是哪一类权限,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操作权限、“FILE”表示文件的修改权限、“ELEMENT”表示页面元素的可见性控制等。

这样设计的好处有二。

其一,不需要区分哪些是权限操作,哪些是资源,(实际上,有时候也不好区分,如菜单,把它理解为资源呢还是功能模块权限呢?)。

基于RBAC模型的权限管理系统设计

基于RBAC模型的权限管理系统设计

基于RBAC模型的权限管理系统设计权限管理系统是现代信息管理系统极为重要的组成部分,其主要任务在于对系统中各个用户的权限进行管理,保障系统的安全性和稳定性,同时保证用户数据的隐私和保密性。

而基于rbac模型的权限管理系统,是目前被广泛采用的权限管理技术之一,其具有权限灵活、易于维护等优点,在具体的实现过程中也面临着一些问题。

本篇文章将会结合实例,对基于rbac模型的权限管理系统进行设计和探讨。

一、rbac模型的基本概念rbac模型,即基于角色的访问控制(Role-Based Access Control),其是一个灵活且易于维护的权限控制模型。

该模型主要由角色、用户、权限和访问控制的策略几部分组成,其中角色是rbac模型的核心概念,通过角色的授予和收回,来实现对用户权限的管理。

rbac模型的安全策略可以描述为:一个用户只能执行已被授权给他的角色所允许的操作,任何用户均不能超越其权限范围所赋予的功能和任务的边界。

具体而言,rbac模型主要包括以下几个基本概念:1. 用户(User):指系统中执行任务的实体,需要进行权限控制;2. 角色(Role):权限的集合,具有相同权限的用户集合,每个用户可以拥有多个角色;3. 权限(Permission):系统中的功能、资源、操作等,需要设置相应的权限控制;4. 授权(Authorization):将用户赋予相应角色以获取特定权限的过程;5. 会话(Session):用户与系统进行交互的时间段,系统应在这个时间段内有效地控制用户访问权限。

二、rbac模型的优点和实现方式rbac模型相对于其他权限管理模型,具有如下优点:1. 集中化管理:通过对角色和权限进行集中管理,可以实现系统的动态管理和维护;2. 适应性强:对于各种企业的权限管理需求,尤其是大规模集成的企业环境,应用rbac能够很好地适应变化;3. 灵活性高:通过管理角色、权限和用户之间的映射关系,实现了权限的灵活控制;4. 安全性好:通过一系列的访问控制策略(如分级权限、非法访问限制等),确保系统信息的安全性和保密性。

基于RBAC模型的权限管理系统的设计和实现

基于RBAC模型的权限管理系统的设计和实现

基于RBAC模型的权限管理系统的设计和实现RBAC(Role-Based Access Control)模型是一种常见的权限管理模型,它根据用户的角色来控制其访问系统资源的权限。

下面将详细介绍基于RBAC模型的权限管理系统的设计和实现。

权限管理系统是一种用于控制用户对系统资源进行访问的系统。

它通过定义角色、权限和用户的关系,实现了对用户的访问进行控制和管理。

基于RBAC模型的权限管理系统可以提供更加灵活和安全的权限控制机制。

首先,需要设计和构建角色,角色是对用户进行权限管理的一种方式。

可以将用户划分为不同的角色,每个角色具有一组特定的权限。

例如,一个网站的角色可以包括管理员、用户、访客等。

然后,定义角色与权限之间的关系。

一个角色可以具有多个权限,一个权限可以被多个角色具有,这种关系通常是多对多的。

可以使用关联表来表示角色和权限之间的对应关系,关联表中存储了角色ID和权限ID的对应关系。

接下来,需要创建用户,并将用户与角色进行关联。

用户是系统中的具体实体,每个用户可以拥有一个或多个角色。

通过将用户与角色关联,可以根据用户的角色来判断其具有的权限。

最后,实现权限的验证和控制。

在用户访问系统资源时,系统需要验证该用户是否具有访问该资源的权限。

可以通过在系统中添加访问控制的逻辑来实现权限的验证和控制。

例如,在网站中,可以通过添加访问控制列表(ACL)来限制用户访问一些页面或功能。

1.灵活性:RBAC模型允许根据不同的需求进行灵活的权限控制和管理。

2.可扩展性:可以根据系统的需求轻松地添加新的角色和权限。

3.安全性:通过对用户的访问进行控制和管理,可以提高系统的安全性,防止未授权的用户访问系统资源。

在实现权限管理系统时,需要考虑以下几个方面:1.用户界面:需要设计一个用户友好的界面,使用户能够轻松地管理和配置角色和权限。

2.数据库设计:需要设计合适的数据结构来存储角色、权限和用户之间的关系。

3.访问控制逻辑:需要实现权限的验证和控制的逻辑,确保只有具有相应权限的用户才能访问系统资源。

基于RBAC的通用权限管理设计与实现

基于RBAC的通用权限管理设计与实现

基于RBAC的通用权限管理设计与实现
一.引言
RBAC(Role-Based Access Control)是一种基于角色的访问控制模型,它试图通过将用户分配到不同的角色来简化系统管理员的工作,提高系统
安全性、可用性、可维护性等。

目前,RBAC已经成为最重要的安全管理
技术之一,在企业级应用系统中使用得越来越多。

本文将介绍基于RBAC的通用权限管理设计与实现,专注于实现RBAC
模型的原理和实现方式,并结合实际应用,分析实现过程中可能遇到的问
题与解决方案,从而为设计RBAC权限管理系统提供参考。

二.RBAC原理
RBAC模型的核心思想是,将用户分配到不同的角色,通过对角色进
行权限的分配和控制来控制用户的访问权限。

关于RBAC的实现有以下几个步骤:
1、划分角色:首先,要把用户划分成不同的角色,每一个角色都有
一系列可以被执行的操作,这些操作可以是其中一种操作,也可以是一系
列的操作。

2、分配权限:然后,将每个角色对应的操作权限分配给角色,这些
权限可以是可执行的操作,也可以是可读写的操作,可以是可访问的文件,也可以是其中一种权限。

3、赋予用户角色:接下来,将角色分配给具体的用户,这样就可以
实现用户与角色之间的关联,也实现了对不同的用户可以访问不同的权限。

RBAC权限管理系统数据模型

RBAC权限管理系统数据模型

RBAC权限管理系统数据模型懒得多写了,懂的看建表脚本就懂了。

-- ------------------------------ Table structure for ucb_user-- ----------------------------DROP TABLE IF EXISTS ucb_user;CREATE TABLE ucb_user (id char(32) NOT NULL COMMENT '主键(UUID)',user_type tinyint(3) unsigned NOT NULL DEFAULT '0' COMMENT '⽤户类型:0、未定义;1、内部⽤户;2、合作⽅⽤户;3、外部⽤户', source tinyint(3) DEFAULT '0' COMMENT '来源',code varchar(8) DEFAULT NULL COMMENT '⽤户编码',name varchar(64) NOT NULL COMMENT '名称',account varchar(64) NOT NULL COMMENT '登录账号',mobile varchar(32) DEFAULT NULL COMMENT '⼿机号',email varchar(64) DEFAULT NULL COMMENT '电⼦邮箱',union_id varchar(128) DEFAULT NULL COMMENT '微信UnionID',password varchar(256) NOT NULL DEFAULT 'e10adc3949ba59abbe56e057f20f883e' COMMENT '密码(RSA加密)',paypw char(32) DEFAULT NULL COMMENT '⽀付密码(MD5)',head_img varchar(256) DEFAULT NULL COMMENT '⽤户头像',remark varchar(256) DEFAULT NULL COMMENT '备注',setting json DEFAULT NULL COMMENT '配置信息',invite_code varchar(32) DEFAULT NULL COMMENT '邀请码',inviter varchar(64) DEFAULT NULL COMMENT '邀请⼈',inviter_id char(32) DEFAULT NULL COMMENT '邀请⼈ID',is_builtin bit(1) NOT NULL DEFAULT b'0' COMMENT '是否内置:0、⾮内置;1、内置',is_invalid bit(1) NOT NULL DEFAULT b'0' COMMENT '是否失效:0、有效;1、失效',creator varchar(64) NOT NULL COMMENT '创建⼈',creator_id char(32) NOT NULL COMMENT '创建⼈ID',created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE,KEY idx_ucb_user_code (code) USING BTREE,KEY idx_ucb_user_invite_code (invite_code) USING BTREE,UNIQUE KEY idx_ucb_user_account (account) USING BTREE,UNIQUE KEY idx_ucb_user_mobile (mobile) USING BTREE,UNIQUE KEY idx_ucb_user_email (email) USING BTREE,UNIQUE KEY idx_ucb_user_union_id (union_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='⽤户表';-- ------------------------------ Table structure for ucg_group-- ----------------------------DROP TABLE IF EXISTS ucg_group;CREATE TABLE ucg_group (id char(32) NOT NULL COMMENT '主键(UUID)',name varchar(64) NOT NULL COMMENT '名称',remark varchar(256) DEFAULT NULL COMMENT '备注',is_builtin bit(1) NOT NULL DEFAULT b'0' COMMENT '是否内置:0、⾮内置;1、内置',creator varchar(64) NOT NULL COMMENT '创建⼈',creator_id char(32) NOT NULL COMMENT '创建⼈ID',created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE,KEY idx_ucg_group_tenant_id (tenant_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='⽤户组表';-- ------------------------------ Table structure for ucg_group_member-- ----------------------------DROP TABLE IF EXISTS ucg_group_member;CREATE TABLE ucg_group_member (id char(32) NOT NULL COMMENT '主键(UUID)',group_id char(32) NOT NULL COMMENT '⽤户组ID',user_id char(32) NOT NULL COMMENT '⽤户ID',PRIMARY KEY (id) USING BTREE,KEY idx_ucg_group_member_group_id (group_id) USING BTREE,KEY idx_ucg_group_member_user_id (user_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='⽤户组成员表';-- ------------------------------ Table structure for uco_org-- ----------------------------DROP TABLE IF EXISTS uco_org;CREATE TABLE uco_org (id char(32) NOT NULL COMMENT '主键(UUID)',parent_id char(32) DEFAULT NULL COMMENT '⽗级ID',node_type tinyint(3) unsigned DEFAULT NULL COMMENT '节点类型:0、机构;1、部门;2、职位',index tinyint(3) unsigned NOT NULL COMMENT '序号',code varchar(8) DEFAULT NULL COMMENT '编码',name varchar(64) NOT NULL COMMENT '名称',alias varchar(64) DEFAULT NULL COMMENT '简称',full_name varchar(128) DEFAULT NULL COMMENT '全称',is_invalid bit(1) NOT NULL DEFAULT b'0' COMMENT '是否失效:0、有效;1、失效',creator varchar(64) NOT NULL COMMENT '创建⼈',creator_id char(32) NOT NULL COMMENT '创建⼈ID',created_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE,UNIQUE KEY idx_uco_org_code (code) USING BTREE,KEY idx_uco_org_tenant_id (tenant_id) USING BTREE,KEY idx_uco_org_parent_id (parent_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='组织机构表';-- ------------------------------ Table structure for uco_org_member-- ----------------------------DROP TABLE IF EXISTS uco_org_member;CREATE TABLE uco_org_member (id char(32) NOT NULL COMMENT '主键(UUID)',org_id char(32) NOT NULL COMMENT '职位ID(组织机构表ID)',user_id char(32) NOT NULL COMMENT '⽤户ID(⽤户表ID)',PRIMARY KEY (id) USING BTREE,KEY idx_uco_org_member_org_id (org_id) USING BTREE,KEY idx_uco_org_member_user_id (user_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='职位成员表';-- ------------------------------ Table structure for ucs_application-- ----------------------------DROP TABLE IF EXISTS ucs_application;CREATE TABLE ucs_application (id char(32) NOT NULL COMMENT '主键(UUID)',index int(11) unsigned NOT NULL COMMENT '序号',name varchar(64) NOT NULL COMMENT '应⽤名称',alias varchar(64) NOT NULL COMMENT '应⽤简称',icon varchar(128) DEFAULT NULL COMMENT '应⽤图标',host varchar(128) DEFAULT NULL COMMENT '应⽤域名',token_life int(10) unsigned NOT NULL DEFAULT '24' COMMENT '令牌⽣命周期(毫秒)',is_signin_one bit(1) NOT NULL DEFAULT b'0' COMMENT '是否单点登录:0、允许多点;1、单点登录',is_auto_refresh bit(1) NOT NULL DEFAULT b'0' COMMENT '是否⾃动刷新:0、⼿动刷新;1、⾃动刷新()', creator varchar(64) NOT NULL COMMENT '创建⼈',creator_id char(32) NOT NULL COMMENT '创建⽤户ID',created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='应⽤表';-- ------------------------------ Table structure for ucs_navigator-- ----------------------------DROP TABLE IF EXISTS ucs_navigator;CREATE TABLE ucs_navigator (id char(32) NOT NULL COMMENT '主键(UUID)',parent_id char(32) DEFAULT NULL COMMENT '⽗级导航ID',app_id char(32) NOT NULL COMMENT '应⽤ID',type tinyint(3) unsigned NOT NULL COMMENT '导航级别',index int(11) unsigned NOT NULL COMMENT '序号',name varchar(64) NOT NULL COMMENT '名称',icon varchar(128) DEFAULT NULL COMMENT '图标Url',url varchar(128) DEFAULT NULL COMMENT '模块/页⾯Url',remark varchar(256) DEFAULT NULL COMMENT '备注',creator varchar(64) NOT NULL COMMENT '创建⼈',creator_id char(32) NOT NULL COMMENT '创建⽤户ID',created_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE,KEY idx_ucs_navigator_app_id (app_id) USING BTREE,KEY idx_ucs_navigator_parent_id (parent_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='导航表';-- ------------------------------ Table structure for ucs_function-- ----------------------------DROP TABLE IF EXISTS ucs_function;CREATE TABLE ucs_function (id char(32) NOT NULL COMMENT '主键(UUID)',nav_id char(32) NOT NULL COMMENT '导航(末级模块)ID',type tinyint(3) unsigned NOT NULL COMMENT '功能类型 0:全局功能;1:数据项功能;2:其他功能',code varchar(16) DEFAULT NULL COMMENT '代码',index int(11) unsigned NOT NULL COMMENT '序号',name varchar(64) NOT NULL COMMENT '名称',alias varchar(64) DEFAULT NULL COMMENT '别名',icon varchar(128) DEFAULT NULL COMMENT '图标Url',url varchar(128) DEFAULT NULL COMMENT '功能URL',interfaces varchar(512) DEFAULT NULL COMMENT '接⼝URL,功能对应多个URL以逗号分隔(不含域名及端⼝号)', remark varchar(256) DEFAULT NULL COMMENT '备注',begin_group bit(1) NOT NULL DEFAULT b'0' COMMENT '是否开始分组',hide_text bit(1) NOT NULL DEFAULT b'0' COMMENT '是否隐藏⽂字',is_invisible bit(1) NOT NULL DEFAULT b'0' COMMENT '是否不可见:0、可见;1、不可见',creator_id char(32) NOT NULL COMMENT '创建⽤户ID',created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE,KEY idx_ucs_function_nav_id (nav_id) USING BTREE,KEY idx_ucs_function_alias (alias) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='功能表';-- ------------------------------ Table structure for ucr_config-- ----------------------------DROP TABLE IF EXISTS ucr_config;CREATE TABLE ucr_config (id char(32) NOT NULL COMMENT '主键(UUID)',data_type int(3) unsigned NOT NULL COMMENT '类型:0、⽆归属;1、仅本⼈;2、仅本部门;3、部门所有;4、机构所有', name varchar(32) NOT NULL COMMENT '名称',PRIMARY KEY (id) USING BTREE,KEY idx_ucr_role_data_permit_data_type (data_type) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='数据配置表';-- ------------------------------ Table structure for ucr_role-- ----------------------------DROP TABLE IF EXISTS ucr_role;CREATE TABLE ucr_role (id char(32) NOT NULL COMMENT '主键(UUID)',app_id char(32) DEFAULT NULL COMMENT '应⽤ID,如不为空则该⾓⾊为应⽤专有',name varchar(64) NOT NULL COMMENT '名称',remark varchar(256) DEFAULT NULL COMMENT '备注',is_builtin bit(1) NOT NULL DEFAULT b'0' COMMENT '是否内置:0、⾮内置;1、内置',creator varchar(64) NOT NULL COMMENT '创建⼈',creator_id char(32) NOT NULL COMMENT '创建⼈ID',created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE,KEY idx_ucr_role_tenant_id (tenant_id) USING BTREE,KEY idx_ucr_role_app_id (app_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='⾓⾊表';-- ------------------------------ Table structure for ucr_role_func_permit-- ----------------------------DROP TABLE IF EXISTS ucr_role_func_permit;CREATE TABLE ucr_role_func_permit (id char(32) NOT NULL COMMENT '主键(UUID)',role_id char(32) NOT NULL COMMENT '⾓⾊ID',function_id char(32) NOT NULL COMMENT '功能ID',permit bit(1) NOT NULL DEFAULT b'0' COMMENT '授权类型:0、拒绝;1、允许',creator varchar(64) NOT NULL COMMENT '创建⼈',creator_id char(32) NOT NULL COMMENT '创建⼈ID',created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE,KEY idx_ucr_role_func_permit_role_id (role_id) USING BTREE,KEY idx_ucr_role_func_permit_function_id (function_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='⾓⾊功能权限表';-- ------------------------------ Table structure for ucr_role_data_permit-- ----------------------------DROP TABLE IF EXISTS ucr_role_data_permit;CREATE TABLE ucr_role_data_permit (id char(32) NOT NULL COMMENT '主键(UUID)',role_id char(32) NOT NULL COMMENT '⾓⾊ID',module_id char(32) NOT NULL COMMENT '业务模块ID',mode int(3) unsigned NOT NULL COMMENT '授权模式:0、相对模式;1、⽤户模式;2、部门模式',owner_id char(32) NOT NULL COMMENT '数据所有者ID,相对模式下为模式ID',permit bit(1) NOT NULL DEFAULT b'0' COMMENT '授权类型:0、只读;1、读写',creator varchar(64) NOT NULL COMMENT '创建⼈',creator_id char(32) NOT NULL COMMENT '创建⼈ID',created_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (id) USING BTREE,KEY idx_ucr_role_data_permit_role_id (role_id) USING BTREE,KEY idx_ucr_role_data_permit_module_id (module_id) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='⾓⾊数据权限表';。

利用RBAC模型实现一个通用的权限管理系统

利用RBAC模型实现一个通用的权限管理系统

利⽤RBAC模型实现⼀个通⽤的权限管理系统本⽂主要描述⼀个通⽤的权限系统实现思路与过程。

也是对此次制作权限管理模块的总结。

制作此系统的初衷是为了让这个权限系统得以“通⽤”。

就是⽣产⼀个web系统通过调⽤这个权限系统(⽣成的dll⽂件),就可以实现权限管理。

这个权限系统会管理已⽣产系统的所有⽤户,菜单,操作项,⾓⾊分配,权限分配,⽇志等内容。

实现此功能从正常访问和⾮法访问两个⽅⾯⼊⼿。

正常访问即⽤户登录系统后只能看到或操作⾃⼰拥有的菜单;⾮法访问即通过拼写url等途径访问系统的某个功能;所以程序除了实现⽤户登录后获取⽤户拥有的菜单权限,更要挡住⽤户的⾮法请求。

两者缺⼀不可。

⼀.概念 实现这个功能主要利⽤RBAC权限设计模型,英⽂(Role-Based Access Control)译为基于⾓⾊的权限管理⼜叫基于⾓⾊的访问控制。

⼆.数据库设计1.系统表:因为要达到"通⽤",所以这个表会记录各个系统。

其他⽤户、菜单、操作、权限表每条记录都会对应系统代码。

字段说明:Code —> 系统标识代码SysName —> 系统名称2.菜单表:记录菜单。

每个功能当成⼀个菜单,菜单有url属性,⽤户通过点击菜单来访问对应功能;字段说明:ID —> 主键,⾃增标识MenuName —> 菜单名称 PageUrl —> 菜单对应url PId —> 菜单⽗级Id Lv —> 菜单等级,分⼀级菜单和⼆级菜单ControllerAction —> 菜单唯⼀标识,⽤来做权限控制SystemCode —> 系统标识代码3.操作表:此表主要是为了判断⽤户是否有来操作某个具体功能,如常⽤的【删除】功能等操作都放在这个表⾥;字段说明:ID —> 主键,⾃增标识OprateName —> 操作名称 OperateCode —> 操作标识代码SystemCode —> 系统标识代码4.⽤户表:记录所有系统的使⽤⽤户。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于RBAC模型的通用权限管理系统的设计(数据模型)的扩展
1 RBAC模型
访问控制是针对越权使用资源的防御措施。

基本目标是为了限制访问主体(用户、进程、服务等)对访问客体(文件、系统等)的访问权限,从而使计算机系统在合法范围内使用;决定用户能做什么,也决定代表一定用户利益的程序能做什么[1]。

企业环境中的访问控制策略一般有三种:自主型访问控制方法、强制型访问控制方法和基于角色的访问控制方法(RBAC)。

其中,自主式太弱,强制式太强,二者工作量大,不便于管理[1]。

基于角色的访问控制方法是目前公认的解决大型企业的统一资源访问控制的有效方法。

其显著的两大特征是:1.减小授权管理的复杂性,降低管理开销;2.灵活地支持企业的安全策略,并对企业的变化有很大的伸缩性。

NIST(The National Institute of Standards and Technology,美国国家标准与技术研究院)标准RBAC模型由4个部件模型组成,这4个部件模型分别是基本模型RBAC0(Core RBAC)、角色分级模型RBAC1(Hierarchal RBAC)、角色限制模型RBAC2(Constraint RBAC)和统一模型RBAC3(Combines RBAC)[1]。

RBAC0模型如图1所示。

a. RBAC0定义了能构成一个RBAC控制系统的最小的元素集合。

在RBAC之中,包含用户users(USERS)、角色roles(ROLES)、目标objects(OBS)、操作operations(OPS)、许可权permissions(PRMS)五个基本数据元素,权限被赋予角色,而不是用户,当一个角色被指定给一个用户时,此用户就拥有了该角色所包含的权限。

会话sessions是用户与激活的角色集合之间的映射。

RBAC0与传统访问控制的差别在于增加一层间接性带来了灵活性,RBAC1、RBAC2、RBAC3都是先后在RBAC0上的扩展。

b. RBAC1引入角色间的继承关系,角色间的继承关系可分为一般继承关系和受限继承关系。

一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。

而受限继承关系则进一步要求角色继承关系是一个树结构。

c. RBAC2模型中添加了责任分离关系。

RBAC2的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。

责任分离包括静态责任分离和动态责任分离。

约束与用户-角色-权限关系一起决定了RBAC2模型中用户的访问许可。

d. RBAC3包含了RBAC1和RBAC2,既提供了角色间的继承关系,又提供了责任分离关系。

2核心对象模型设计
根据RBAC模型的权限设计思想,建立权限管理系统的核心对象模型.对象模型中包含的基本元素主要有:用户(Users)、用户组(Group)、角色(Role)、目标(Objects)、访问模式(Access Mode)、操作(Operator)。

主要的关系有:分配角色权限PA(Permission Assignment)、分配用户角色UA(Users Assignmen描述如下:
a .控制对象:是系统所要保护的资源(Resource),可以被访问的对象。

资源的定义需要注意以下两个问题:
1.资源具有层次关系和包含关系。

例如,网页是资源,网页上的按钮、文本框等对象也是资源,是网页节点的子节点,如可以访问按钮,则必须能够访问页面。

2.这里提及的资源概念是指资源的类别(Resource Class),不是某个特定资源的实例(Resource Instance)。

资源的类别和资源的实例的区分,以及资源的粒度的细分,有利于确定权限管理系统和应用系统之间的管理边界,权限管理系统需要对于资源的类别进行权限管理,而应用系统需要对特定资源的实例进行权限管理。

两者的区分主要是基于以下两点考虑:一方面,资源实例的权限常具有资源的相关性。

即根据资源实例和访问资源的主体之间的关联关系,才可能进行资源的实例权限判断。

例如,在管理信息系统中,需要按照营业区域划分不同部门的客户,A区和B区都具有修改客户资料这一受控的资源,这里“客户档案资料”是属于资源的类别的范畴。

如果规定A区只能修改A区管理的客户资料,就必须要区分出资料的归属,这里的资源是属于资源实例的范畴。

客户档案(资源)本身应该有其使用者的信息(客户资料可能就含有营业区域这一属性),才能区分特定资源的实例操作,可以修改属于自己管辖的信息内容。

另一方面,资源的实例权限常具有相当大的业务逻辑相关性。

对不同的业务逻辑,常常意味着完全不同的权限判定原则和策略。

b.权限:对受保护的资源操作的访问许可(Access Permission),是绑定在特定的资源实例上的。

对应地,访问策略(Access Strategy)和资源类别相关,不同的资源类别可能采用不同的访问模式(Access Mode)。

例如,页面具有能打开、不能打开的访问模式,按钮具有可用、不可用的访问模式,文本编辑框具有可编辑、不可编辑的访问模式。

同一资源的访问策略可能存在排斥和包含关系。

例如,某个数据集的可修改访问模式就包含了可查询访问模式。

c.用户:是权限的拥有者或主体。

用户和权限实现分离,通过授权管理进行绑定。

d.用户组:一组用户的集合。

在业务逻辑的判断中,可以实现基于个人身份或组的身份进行判断。

系统弱化了用户组的概念,主要实现用户(个人的身份)的方式。

e.角色:权限分配的单位与载体。

角色通过继承关系支持分级的权限实现。

例如,科长角色同时具有科长角色、科内不同业务人员角色。

f.操作:完成资源的类别和访问策略之间的绑定。

g.分配角色权限PA:实现操作和角色之间的关联关系映射。

h.分配用户角色UA:实现用户和角色之间的关联关系映射。

该对象模型最终将访问控制模型转化为访问矩阵形式。

访问矩阵中的行对应于用户,列对应于操作,每个矩阵元素规定了相应的角色,对应于相应的目标被准予的访问许可、实施行为。

按访问矩阵中的行看,是访问能力表CL(Access Capabilities)的内容;按访问矩阵中的列看,是访问控制表ACL(Access Control Lists)的内容。

数据模型图如下:。

相关文档
最新文档