矩阵结构的数据库设计:
组织结构表 (单位ID,部门ID,上级部门ID,...)
用户表(单位ID,部门ID,用户ID,用户名称,口令...)
组织结构关系表(部门ID,用户ID)
上述表中如何体现矩阵型的组织结构?在用户表中有一个部门ID,关联组织结构表的部门ID,这样部门和用户是一对多的,即一个行政部门有多个用户,一个用户只能属于一个行政部门;
利用组织结构表和组织结构关系表可建立多对多的组织结构-人员关系,这样用户除了属于一个行政部门外,如果要体现兼职,或者属于多个群组,可利用此表存储多对多关系.这样即有组织结构表反映垂直的组织结构关系,又可利用组织结构-人员多对多关系建立任意的关联.
在使用了Spring Security的权限框架的系统中,一个完整的用户权限集合是:
用户-权限+用户-角色-权限+用户按行政部门的组织结构权限+用户按群组(即多对多的组织结构)划分获得的权限,在openjweb中实现了所有上述权限,其数据库的视图参考如下:
create or replace view v_user_auth as
select a.user_id,a.login_id,b.comm_code,b.auth_name,b.auth_resource from
comm_user a,comm_auth b ,comm_user_auth c
where c.user_id = a.user_id
and c.auth_id = b.auth_id
union
select a.user_id,a.login_id,b.comm_code,b.auth_name,b.auth_resource from
comm_user a,comm_auth b , comm_user_role d,comm_role_auth e
where a.user_id = d.user_id
and d.role_id = e.role_id
and e.auth_id = b.auth_id
union
select distinct a.user_id,a.login_id,b.comm_code,b.auth_name,b.auth_resource from
comm_user a,comm_auth b , comm_org_emp_rel d,comm_dept_auth e
where a.user_id = d.user_id
and d.org_id = e.dept_id
and e.auth_id = b.auth_id
union
select distinct a.user_id,a.login_id,b.comm_code,b.auth_name,b.auth_resource from
comm_user a,comm_auth b ,comm_dept d ,comm_dept_auth e
where a.dept_id = d.pk_id
and d.row_id = e.dept_id
and e.auth_id = b.auth_id;
说明:comm_auth为权限基本信息表;
comm_user_auth为用户权限关系表
comm_user_role为用户角色关系表
comm_role_auth为角色权限关系表
comm_roles为角色表
comm_org_emp_rel为组织结构人员关系表(即多对多关系表)
comm_dept_auth为组织结构权限表
comm_dept为组织结构基本信息表
目前openjweb已经实现了用户,角色,权限,组织结构基本信息录入及用户-权限,用户-角色关联,角色授权,组织结构-人员多对多维护,组织结构授权等功能,形成了一个完整的权限管理解决方案.