OA权限管理的实现(下)
OA权限管理设计的实现
物理数据模型图如下:
物理数据模型图
根据以上设计思想,权限管理总共需要以下基本表:
tb_User:用户信息基本表;
tb_Department:部门表;
tb_Company:公司表;
tb_Module:系统模块表;
tb_Action:系统中所有操作的动作表;
tb_Permit:由tb_Module与tb_Action两表结合产生的系统基本权限表;
tb_Permit_Group:权限组表,将一模块的中的所有权限划分一个权限组中,可以通过权限组授予用户权限;
tb_Role:角色表,基本权限的集合。无上级与下级之分;
tb_Position:职位表,有上级与下级之分;
tb_Project:项目组表,
tb_Role_Permit:角色授权表;
tb_Postion_Permit:职位授权表;
tb_Project_Permit:项目授权表;
tb_Project_User:项目成员表,IsLead字段代表此成员为项目组长;
tb_Postion_User:职位成员表;
tb_User_Permit:用户授权表,用户ID与角色、职位、项目及直接授予的权限串表;
权限的产生:
由tb_Module中的ModuleCode与tb_Action中的ActionCode组成
权限代码PermitCode=ModuleCode+ActionCode。
实例:ModuleCode=0101,ActionCode=01,则PermitCode=010101。
权限值则有ModuleValue与ActionCode组合而成,采用下划线来连接。
实例:ModuleValue=Sys_User,ActionValue=AdD,PermitValue= Sys_User_Add
权限组:
包括一组同一模块下的权限的组合,如管理用户包括基本的权限:添加、删除、修改、查看等,将这些组合起来构成一个用户组——“用户管理”权限组。其它类似。只是为了更方便的查看系统权限与权限的分配。
实例:如管理用户的权限代码为010101à查看用户,010102à添加用户,010103à删除用户,010104à修改用户,010105à审核用户等,将这些基本权限组合起来一个集合而构成了“用户管理”权限组。
角色、职位、项目:
也就是按特定的需要划分一种权限的集合。使用角色授权表、职位授权表、项目授权表来实现。授权表中存放的是权限代码PermitCode,而不是权限组的GroupCode代码。
用户授权:
由用户授权表来实现,用户授权表中的RoleCode、PositionCode、ProjectCode分别是角色表中RoleCode组成的串、职位表PositionCode组成的串、ProjectCode组成的串。与角色授权表中的角色代码RoleCode、职位授权表中PositionCode、项目授权表中的ProjectCode不对应(不是主表与从表之间外键关系)。
从而能够实现了一个用户可以拥有多个角色、多个职位、多个项目的情况。
用户授权表中的PermitCode为直接授权的权限代码串,直接给用户分配权限。
实例:
用户ID为UserId=1的用户权限授权表的记录为:
RoleCode=001,003
PostionCode = 001,002
ProjectCode=001,005
PermitCode = 010101,020102
表明此用户拥有两个角色,代码为001和003,并继承这两个角色的权限;
担任两个职位,代码为001与002,并继承两个职位的权限;
属于两个项目组中的成员,项目代码为001与005,并继承两个项目中的权限。
直接指定给用户的权限为010101与010102这两个权限代码的权限
用户权限字符串:
根据用户授权表的角色代码、职位代码、项目代码得到权限字符串及表中直接分配的权限字符串组合成一个用户的所有权限字符串集合。