一个OA系统的权限设计
最近研究一个OA系统的代码,来说说它权限设计的这部分吧。
数据库中与之相关的包含九个表,Action(动作表),Department(部门表),Employee(职工表),Function(模块表),Role(角色表),Purview(权限表),此外还有EmpDep(确定职工与部门的联系),FuncAct(确定模块与操作的联系),EmpRole(职工与角色的联系)。
简单来说就是每个职工(Employee)有相应的工作部门(Department)以及角色(Role),而每一个模块也有相应的操作(Action)。下面来看看Purview表的结构:
因此,一个职工在某一模块有没有操作权限只要看他在purview表中存不存在Role_ID,Func_ID,Act_ID与这个职工的一样即可。
存储过程如下:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
数据库中与之相关的包含九个表,Action(动作表),Department(部门表),Employee(职工表),Function(模块表),Role(角色表),Purview(权限表),此外还有EmpDep(确定职工与部门的联系),FuncAct(确定模块与操作的联系),EmpRole(职工与角色的联系)。
简单来说就是每个职工(Employee)有相应的工作部门(Department)以及角色(Role),而每一个模块也有相应的操作(Action)。下面来看看Purview表的结构:
Gu_ID |
主键 |
Role_ID |
外键(role) |
Func_ID |
外键(Function) |
Act_ID |
外键(Action) |
存储过程如下:
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER procedure [dbo].[CheckPurview]
@Role_ID bigint,
@Func_Name nvarchar(50),
@Act_Name nvarchar(50),
@Succeed bit output
as
if exists(select * from purview
where role_id=@Role_ID
and func_id in(select func_id from [function] where func_name=@Func_Name)
and act_id in(select act_id from [Action] where act_name=@Act_Name)
)
begin
set @Succeed=1
end
else
begin
set @Succeed=0
end