在软件开发中,为软件加入权限控制功能,使不同的用户有不同的使用权限,是非常重要的一项功能,由其在开发数据库方面的应用,这项功能更为重要。大家知道,现在的应用,一般均以菜单访问功能的形式出现,按照常规的做法,只要让注册进入应用的不同用户,可以访问不同的功能菜单,从而实现功能权限的控制,但是,有这样一个问题,此种方法便无能为力,现在的应用软件,为了提高软件的易操作性,同一功能可能有多种不同的访问方式,如工具条,右键菜单等;同样,同一个功能,也可能在软件的不同地方被调用,而不仅仅被限制为用程序的主菜单来调用,这样,才能保证应用的易用性。
构建强健的权限管理系统,保证管理信息系统的安全性是十分重要的。权限管理系统是管理信息系统中可代码重用性最高的模块之一。任何多用户的系统都不可避免的涉及到相同的权限需求,都需要解决实体鉴别、数据保密性、数据完整性、防抵赖和访问控制等安全服务(据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给子系统调用即可,这样就可以以权限系统为中心,建立一系列的应用系统。
如果企业的业务产品不多,则可以把整套控制及界面显示等集成在一起,其他访问调用业务接口访问即可。