大话系统之权限控制
在软件开发中,为软件加入权限控制功能,使不同的用户有不同的使用权限,是非常重要的一项功能,由其在开发数据库方面的应用,这项功能更为重要。大家知道,现在的应用,一般均以菜单访问功能的形式出现,按照常规的做法,只要让注册进入应用的不同用户,可以访问不同的功能菜单,从而实现功能权限的控制,但是,有这样一个问题,此种方法便无能为力,现在的应用软件,为了提高软件的易操作性,同一功能可能有多种不同的访问方式,如工具条,右键菜单等;同样,同一个功能,也可能在软件的不同地方被调用,而不仅仅被限制为用程序的主菜单来调用,这样,才能保证应用的易用性。
构建强健的
权限管理系统
,保证管理信息系统的安全性是十分重要的。
权限管理系统
是管理信息系统中可代码重用性最高的模块之一。任何多用户的系统都不可避免的涉及到相同的权限需求,都需要解决实体鉴别、数据保密性、数据完整性、防抵赖和访问控制等安全服务(据ISO7498-2)。
权限系统是一个完善项目的基石,权限控制可以分为两部分内容:功能权限控制和数据权限控制。介绍权限控制,必须了解什么是RBAC,
RBAC
模型是目前最为广泛接受的权限模型。
下面介绍一下RBAC的基本知识。
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
所示。
权限控制具体项目中的实现:
在我们的项目中,我们一般会接触到下面几个概念:角色、用户、部门机构、公司以及角色可以操作的功能,如下图所示,*符号表示多对多的关系,我们可以看到,下面对象之间的关系:
部门机构和用户是多对多关系、角色和部门是多对多关系、角色和用户是多对多关系、角色和功能是多对多关系,每个部门机构只属于一个公司。
权限分配遵循
RBAC
(
Role Based Access Control
:基于角色的访问控制)的方式,用户或者部门机构,只有隶属于某个指定的角色,才具有指定的权限。
在上图中,功能是指一个功能的树列表,就是一个控制标识,就像一把钥匙,谁拥有就有哪些权限,这把钥匙可以分配给不同的对象,如按钮、菜单、页面、链接等等,一般情况下,用户访问页面没有该页面的全新,则返回到错误提示页面,如果按钮没有权限,可能被隐藏或者禁用,菜单和链接亦如此。
功能管理是指功能的标识,一般根据业务划分,是一棵树的概念,可以从一个业务范畴开始,到一个具体的细粒度功能点如按钮、链接结束。
那么我们在项目中如何具体使用以上的控制功能呢?
页面对象访问
页面对象继承关系如下图所示
实际业务的具体页面(如浅蓝色所示),继承自
BasePage
基础页面,
BasePage
页面提供了基础的权限认证功能,实际业务的页面只需要在
OnInit
函数中指定页面的控制标识即可控制页面的访问权限,如下所示:
由于系统
在用户登陆,并且验证通过的时候,把该用户对应的角色的功能列表取出来,放到Session中,然后每个具体的业务页面(或者按钮、菜单、链接等)只需要判断用户是否具有某个功能控制ID即可,如果具有,那么就认为具有该功能,否则做出相应的处理,如跳转到指定的错误页面(BasePage中默认处理),或者由程序判断隐藏某些功能或者数据列等操作。
菜单控制
另外,在项目中,菜单是一项很重要的资源,需要会根据用户的权限动态进行显示,菜单显示是一个递归的过程,如果父菜单没有权限,则不显示,如果有,显示父菜单并继续遍历子菜单,有对应的权限则显示,没有就不显示,达到权限控制的目的。
菜单有一个权限控制标识的,通过这个标识来判断用户是否具有权限。
用户管理及用户授权等操作,是每一个系统都会碰到的,如果企业的应用比较多,可以把这些控制内容放到一个独立的权限控制系统中,提供相应的权限控制WebService给子系统调用即可,这样就可以以权限系统为中心,建立一系列的应用系统。
如果企业的业务产品不多,则可以把整套控制及界面显示等集成在一起,其他访问调用业务接口访问即可。