基于角色的权限管理(转载)

本文在RBAC基本思想的基础上,增加资源权限的概念,设计了在企业应用系统中用户权限控制的一种具体的简单实现方法。

关键字 用户权限控制

名词解释

资源权限:资源指的是纳入企业应用的一切需要管理的信息实体,如进销存系统中的进货订单;资源权限则是系统将要在这些资源的基础上进行的访问使用权限的控制;

引言

企业应用系统对安全问题有较高的要求,传统的访问控制方法DAC(Discretionary Access Control,自主访问控制模型)、MAC(Mandatory Access Control,强制访问控制模型)难以满足复杂的企业环境需求。因此,NIST(National Institute of Standards and Technology,美国国家标准化和技术委员会)于上世纪90年代初提出了基于角色的访问控制方法,实现了用户与访问权限的逻辑分离,更符合企业的用户、组织、数据和应用特征。

本文将首先介绍RBAC(Role Based Access Control)的基本思想,在此基础上,给出企业应用系统中实现R-F-RBAC(Role-Function-Resource Based Access Control,基于角色-功能-资源的权限控制)的一种具体方法。

RBAC的基本思想可简单地用图1来表示,即把整个访问控制过程分成两步:访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离。

 

由于RBAC实现了用户与访问权限的逻辑分离,因此它极大的方便了权限管理。例如,如果一个用户的职位发生变化,只要将用户当前的角色去掉,加入代表新职务或新任务的角色即可,角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多,并且委派用户到角色不需要很多技术,可以由行政管理人员来执行,而配置权限到角色的工作比较复杂,需要一定的技术,可以由专门的技术人员来承担,但是不给他们委派用户的权限,这与现实中情况正好一致。

而R-F-RBAC的设计思路是在RBAC基础上的一个发展,引入了资源的概念。何所谓资源,大体来说可以是纳入系统管理的信息,在技术实现层面可以是一张表、一条或一列记录、甚至可以是表的一个单元格。在实践使用中,一些高安全级别额的企业应用,仅仅将权限控制到功能是不够的,要求能控制某些用户只能操作到指定的系统内容。

案例分析

这里我们用一个简单的应用模型实例对R-F-RBAC进行深入分析,即给某企业应用假设一个安全级别较高的合同管理子模块,这个模块涉及如下元素:

·合同文件:根据业务要求分为三个等级(项目级、部门级、公司级);

·具体功能:根据实际功能要求分为草拟、上报、会签、批核;

·操作角色:根据公司行政职位设置有项目经理、部门经理、总经理;

·操作人员:公司的内部人员A项目经理张三、甲部门经理李四、总经理王二;

系统的安全需求为A项目经理张三只能草拟并上报仅限于A项目的项目级别合同文件,甲部门经理李四只能草拟、上报、会签率属于甲部门下的项目级或部门级的合同文件,而总经理王二则有权任意操作整个公司的三个级别的合同文件,可将此模型归纳为如下表格:

人员

角色

功能

资源

王二

总经理

草拟、上报、会签、批核

三个级别的合同文件

李四

部门经理

草拟、上报、会签

甲部门下的项目级或部门级的合同文件

张三

项目经理

草拟、上报

仅限于A项目的项目级别合同文件

解决方案

为此我们要设计如下几张关键的数据表:

·用户表:           记录用户的相关信息,UserID作为唯一的用户标识;

·角色表:           记录角色的相关信息,RoleID作为唯一的角色标识;

·模块及功能表:记录模块相关信息及模块的相关功能,分为主子关系表;

·资源表:            记录系统中的所有需要高安全控制的资源信息,其中ResTable是资源对应的数据表名(如合同信息表),ResTerm则是给定该资源的条件(如甲部门下的项目级或部门级的合同文件)用于限定数据提取范围;

由于本文提到的R-F-RBAC的设计思路均考虑用户可以授予多角色,因此我们需要建立用户-角色对应表,用来记录某用户可能对应的若干角色信息,同样需要建立的是角色-功能对应表和角色-资源对应表,以彻底剥离用户与权限访问间的关系;

数据库关系图(仅涉及关键字段)如下:

 

程序实现

代码实现应分为三大部分:

·权限数据维护:该部分主要实现用户、角色、功能、资源等基础信息的维护,给系统管理员一个便利的操作接口;

·权限数据处理:指的是在程序内部实现权限调用接口,如根据调用者提供的模块及用户的信息给出应该提供可操作数据和功能;

·权限数据引用:在UI层具体的处理用户对应的组合权限,如根据得到的功能权限信息控制UI上按钮、菜单等功能元素的显隐活可用性,或根据得到的资源权限条件组合提数条件以达到某些用户只能操作到指定的系统内容的控制级别

我们开发业务系统的时候,基本上都会涉及到权限管理模块,要求不同的人看到不同的菜单,操作不同的按钮,看到不同的数据。很多初学者面对这样的需求不知道如何下手,特别是稍微复杂点的权限,更是找不到方向,为此我们夜鹰教程网特别推出了这套基于角色权限管理视频教程,通过给用户分配角色,给角色分配权限,来实现权限管理。这样一来,可以实现不同的人管理不同的菜单,操作不同的按钮,看到不同的数据。可以划分权限组,每个组的成员拥有相同的权限。也可以把同一个人分配到不同的权限组,具有多个权限组的权限,实现权限的组合。 本套教程通过c-s和b-s两种模式讲解,如果没有学过winform开发的学员可以通过本套教程补充下winform开发知识,以桌面程序的方式实现数据的CRUD操作,同时还可以学会一些常用控件的使用,特别是树形菜单的使用,以及递归的编程思想。 C-S部分目录 001 课程介绍 002 效果演示 003 新建项目 004 用户表 005 角色表 006 功能权限表 007 用户分配角色的表 008 角色拥有的菜单权限 009 登录界面设计 010 控件name 011 数据库操作类 012 登录操作 013 用户类 014 新建主窗体 015 主窗体布局 016 树形菜单 017 加载数据 018 递归调用 019 点击事件 020 密码修改 021 设备管理 022 角色列表 023 用户列表 024 新增用户 025 插入用户数据 026 显示用户数据 027 查询用户数据 028 用户数据分页 029 编辑用户数据 030 保存用户数据 031 删除用户数据 032 角色主数据 033 表单验证 034 编辑角色 035 角色数据分页 036 删除角色数据 037 设备列表 038 新增设备 039 设备分页 040 编辑设备 041 删除设备 042 点击菜单打开对应窗体 043 用户参数传递 044 通过构造函数传递参数 045 验证旧密码 046 通过菜单打开用户列表 047 菜单权限 048 权限主数据 049 给用户分配角色 050 显示待分配的菜单权限 051 角色用有菜单权限 052 取消菜单权限 053 保存菜单权限 054 清空旧的菜单权限 055 加载旧的菜单权限 056 功能权限配置 057 加载待分配的功能权限 058 加载已分配的功能权限 059 移动功能权限 060 保存功能权限 061 清空旧功能权限 062 分配数据权限 063 拼接已经分配的权限 064 移除权限 065 角色数据权限保存 066 给用户分配角色 067 待分配的角色 068 判断用户拥有的权限 069 获取功能权限 070 控制功能按钮是否可用 071 不能的用户看到不同的数据
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值