日期:2014-05-20  浏览次数:20357 次

OA中用户角色权限问题
一个用户进入OA,我怎么知道他是普通员工,还是经理,还是总经理呢,然后对应用业务操作不同呢?比如说普通员工可以看到自己的数据,经理可以看到自己部门所有员工的,总经理不仅可以看到整个公司所有员工的,还可以对每位员工的数据进行删,改,查。
我现在又一个User表
UId UName DeptID(部门ID)
1 张三 1
2 李四 2
3 王五 2
4 赵六 3
5 赵七 3

部门表:Dept
DId DName DParentID(父节点ID)
1 总经办 0
2 销售部 0
3 人事部 0

最终的树形展示:

总经办
  |________张三(总经理)
  |
销售部
  |________李四 (部门经理)
  |
  |________王五(普通员工)
  |
销售部
  |________赵六 (部门经理)
  |
  |________赵七(普通员工)
  
可能有人会说,我可以再添加一个角色表(Role)
RoleID RoleName
1 总经理
2 部门经理
3 普通员工

这样虽然有了个角色概念,用1,2,3代表不同的角色,那难道让我在程序里判断if(角色ID=="1")...那如果这个公司又增加了一个新的角色,比如说:秘书,用4表示,那我对应整套OA只要是设计的权限部门的都要再加一个判断,判断是否等于4吗?这些我觉得是不可行的。
可能是我的思路问题,但是我不知道像这样的系统,是怎么处理权限的问题的,根据不同的角色,进行不同权限的业务逻辑。

我看了,网上免费的OA系统,他好像是给Role分配功能权限,意思就是比如说这个OA系统有三个功能,新闻发布,新闻查看,新闻管理,然后他根据不同的角色,比如说让总经理都有这些功能,让普通员工只有新闻查看的这个功能。虽然这样的做法在一定程度上解决了权限的问题,但是如果 “新闻管理”这个功能,所有角色都应该有这个功能,不同的是,不同角色看到的信息是不一样的,比如说总经理就看到所有人的,并且可以删,经理看到自己本部门的,员工只能看自己的。这个时候我就没法知道他到底是部门经理呢?还是什么呢?


希望高手能给我个思路,解决办法!谢谢各位咯!

------解决方案--------------------
基于角色的权限管理
http://www.cnblogs.com/badboy2008/articles/579633.html
-----------------------------
 典型的简单权限分配系统方法介绍
[url=http://www.cnblogs.com/jackyrong/archive/2008/10/22/1316645.html[/url]
一个struts1+spring+hibernate的典型权限系统的设计思路,归纳小结如下,特别适用于简单场合的,比如某个单位下,有直属单位及部门的
情况.数据表设计如下
user表:
userid:
username:
unitid: //所属单位的id
deptid://所属部门的id
status:0表示为普通用户 1:表示为该单位的最高管理员
 
role角色表
 
id:编号
rolename:角色名
content:角色的具体分配权限
memo:备注
unit:所属的单位id
userright表:(user与role是多对多,因此需要该表)
id:
userId:
roleid:
 
unit表(单位表)
unitId:单位编号
unitName:单位名
fatherId:上级单位ID (如果为0的时候,表示为最上层的单位)
allFatherId:保存所有关联的父级单位的id路径)
unitType :表明是单位还是部门, 0:单位, 1:部门
 
举个例子说明下:
unitid unitname fatherid allfatherid unittype
1 根单位 0 0
2 根单位部门1 1 ,1 1
3 直属单位1 1 ,1 0
4 直属单位1的部门1 3 ,1,3 1
 
AddressGroup 单位群组表:这个表的作用在于,可以将某几个单位归为一个群组,那么比如在发文的时候,可以一次同时发送文件给该群组下的
所有的单位
groupId 群组编号:
groupName 群组名称
content:包含的单位id,比如某个群组有单位1,3的
 
二 在页面层中,类似如下:
<td rowspan=4>发文管理</td>
<td><input name="box" type="checkbox" value="211">发文登记</td>
<td><input name="box" type="checkbox" value="212" >创建</td>
<td><input name="box" type="checkbox" value="213" >修改</td>
<td width=15%><input name="box" type="checkbox" value="215" >查看</td>
.......就是很多个上面的形式,
然后用javascript把用户所选的都记录下来
function check(){
if (thisForm.roleName.value == ""||trim(thisForm.roleName.value)==""){
alert("请填写角色名称!");
thisForm.roleName.focus();
return false;
}
thisForm.content.value=getRole();
thisForm.submit();
}
//将角色用逗号连接起来
function getRole(){
var allCHK = document.body.all.tags('INPUT');
var lstr = "" ;
for(i=0;i<allCHK.length;i++){
if(allCHK[i].type.toUpperCase()=="CHECKBOX" && allCHK[i].checked==true){
if (lstr==""){