3.3.2 角色bit数组只记录下一级别所有角色的状态信息。如第一bit记录下一级别的第一个角色状态信息。
1 |
0 |
1 |
说明:角色4直接继承于角色1 |
角色5不继承于角色1 |
角色6继承于角色1 |
角色1的bit数组信息如下:
1 |
0 |
1 |
说明:角色4直接继承于角色1 |
角色5不继承于角色1 |
角色6继承于角色1 |
然后搜索角色4和角色6的bit数组信息决定下一级的角色,以此类推。
最后根据角色去确定权限。
3.3.3 实现
在实际实现中首先根据用户角色的编号确定角色的级别,然后确定下一级别的第一个角色编号(这根据角色级别矩阵的信息确定),然后根据bit数组信息迭代搜索。
增加新角色时,只需修改角色级别矩阵和直接相邻的下一级别所有角色bit数组信息(增加一项记录增加角色与该角色的隶属关系);删除角色时,修改直接相邻的下一级别所有角色的bit数组信息(删除一项:删除位之后所有位左移)。
3.4 角色管理模块的总结
在上文中提出的角色管理模块的概念及其实现,主要包括两部分:系统需要维持一个角色级别矩阵,记录系统的角色信息;每一个角色需要记录下一级别所有角色与该角色的隶属关系。该方法具有很强的通用性和高效性,可以为许多实际比较复杂的复杂角色,复杂用户系统提供一定的参考。
4. 系统实现
4.1 UA部分在3中已经讨论。PA(角色权限授权)
一个权限只直接对应于一个角色,不直接隶属其父角色(在数据库中一个权限只存储一次,存储于它直接隶属的角色,不重复);一个角色可直接对应多项权限。角色和权限之间为一对多的关系。
通过3的方法可以得到一个呈现树形关系的角色集合,这一步就是搜索得到这些角色所拥有的权限再集合即可。
4.2 权限到权限项
权限类型分为如下几类:
(1) 功能类
该层所表示的权限范围较大,主要是系统中的子系统或者模块。子系统和模块在系统中以系统菜单的形式表现,因而对用户来说,就是他所能够执行的系统功能菜单。系统功能层权限也就控制了用户对相关子系统菜单是否有执行权限。
(2) 对象类
用于网页访问,一般页面的菜单层次以二层为宜,用户选择了子菜单就直接进入页面。这里的对象层具体来讲就是页面,将本层作为权限的一级,主要是控制用户能够进入的页面。将这一层单独出来而不是作为系统功能层的一部分的主要考虑是可以将某个子系统或子模块作为一个整体赋予用户,同时用户也可以只拥有该子系统或子功能下部分子功能,方便系统管理员的权限指派和管理工作。
(3) 操作类
对某一具体页面来说,不同用户所能执行的操作不一样。例如对数据库操作的页面一般包含四种不同的操作,即添加、删除、修改、打印。不同的操作代表了对该页面数据的不同权限。
权限与权限项之间是一对多的关系,一个权限往往对应多个权限项。根据3步骤中获得的权限在数据库中搜索获取权限项。
4.3 权限项
权限项包括两种类型:菜单和页面。在C/S系统中,主要是功能类权限管理,其权限项只有菜单项,是“权限-菜单项”的两级组织形式;在B/S系统中,主要是对象类、操作类权限,其权限项包括菜单项、页面项,是“权限-页面项”的二级组织形式。
5. 系统权限管理
权限管理是从保障系统安全的角度出
发,对系统的数据及功能进行管理。权限管理模块可以下分四个子模块,分别为:用户管理、角色管理、用户角色关联(角色配置模块)、权限管理、角色权限关联(权限配置模块)。