设计OA系统的用户-角色-权限分配
一,前言
本文主要讲述在OA系统设计时用户——角色——权限的数据库设计,以便实现权限分配。
二,初步分析
用户通过UI登录系统时,把用户的用户名、密码传递给后台判断用户表中是否存在可用的用户信息,如果存在那么允许页面的跳转,并设置一些Session信息,当页面跳转时根据用户的Session信息获取用户的角色,进一步根据角色获取用户的操作权限,这里的操作权限包括角色可以操作的菜单,以及此菜单对应的操作按钮。
通过上面的描述就可以分析出系统中包含的数据表有T_Users(用户表)、T_Roles(角色表)、R_UserRole(用户角色关系表)、T_Menus(菜单表)、T_Button(按钮表)以及
R_Privilege(角色、菜单、按钮关系表)、R_MenuButton(菜单按钮关系表),总共七张表。为了使文章更具有正对性,对于其他和本文分析的问题无关紧要的数据表例如T_Deprt(部门表)等省去不提。
下面通过物理模型图分析这些表的关系:
以上的所有表中省去了对分析问题没有必要存在的一些数据字段。这些必要的字段相信开发的人员都能知道是什么意思,所以不做解释。
需要说明的是:所有关系表(以"R_"开头的表)关联的表中的主键都是N:N的关系。此处需要特殊说明的就是R_Privilege表中的ObjectID、ObjectDescr。因为权限表既需要对应菜单,又需要对应增删改查的
按钮,所以ObjectID的值是MenuID或者MenuButtonID,这样对应的ObjectDescr就是Menu和Button。
当用户登录时,会根据条件ObjectDescr='Menu'获取角色的RoleID对应的ObjectID=T_Menu.MenuID,这样能够获取所拥有的可操作的菜单。
当打开某一页面时,根据条件ObjectDescr='Button'获取角色的RoleID对应的ObjectID=R_MenuButton.MenuButtonID,这样可以获取用户在相关页面的操作按钮BtnID。