项目设计,请指正一下。

07-08-02 wlmouse
这是公司最近做的一个项目的一个子项目。要求用这个统一管理项目的用户角色权限。

我看了别人的设计的ER图(只有ER图,没有对象),一头雾水。因为设个设计涉密,就不在此说了。我只把我自己的设计拿出来,希望指正。

有部门、用户、用户组、角色和资源这几个对象。用户属于部门。部分用户同时属于某用户组。角色管理资源。

要求是当用户登录后,以不同的角色管理时,可以管理不同的部门。

假设角色有两个(全局管理员和部门管理员),要求A用户属于B部门,当A用户以全局管理员登录时,可以管理C部门。以部门管理员管理时,管理B部门。D用户属于E部门,但是属于F用户组,权限规定,当F用户组的用户可以在全局管理员身份登录时,管理C部门,以部门管理员登录时,管理B部门。

我写了几个对象的最简单的类代码(只有这几个类的引用和权限切换代码)。希望指正一下。这么写如何?在用Hibernate好实现吗?

在JavaEye放了半天没人理,转发到这里。我刚刚发现,我这个设计有一个前提,同一条件下,一个用户只能管理一个部门。如果同时管理两个部门,我这个设计就不成了。Map是一对一的键值对。代码比较多,放到下一贴了。

s and Settings-WangLei-My Docum0001.rar

    

wlmouse
2007-08-02 22:38
   1. /** 
   2.  * 角色 
   3.  */  
   4. public class Role {  
   5.     //角色当前用户  
   6.     private User nowUser;  
   7.     //角色使用的资源列表  
   8.     private List<Source> sourceList;  
   9.     //角色用户列表  
  10.     private List<User> userList;  
  11.     //角色用户组列表  
  12.     private List<UserGroup> userGroupList;  
  13.     //角色在不同用户下,能管理的部门的关系Map  
  14.     private Map<User,Department> map;    
  16.     /** Creates a new instance of Role */  
  17.     public Role() {  
  18.     }  
  20.     /** 
  21.      * 得到当前角色的用户 
  22.      */  
  23.     public User getNowUser() {  
  24.         return nowUser;  
  25.     }  
  27.     /** 
  28.      * 设置角色当前用户但是角色必须在用户列表和用户组列表中 
  29.      */  
  30.     public void setNowUser(User nowUser) {  
  31.         if (userList.indexOf(nowUser)>-1){  
  32.             this.nowUser = nowUser;  
  33.         } else {  
  34.             for(UserGroup ug:userGroupList){  
  35.                 List<User> tmpList=ug.getUserList();  
  36.                 if (tmpList.indexOf(nowUser)>-1){  
  37.                     this.nowUser = nowUser;  
  38.                 }  
  39.             }  
  40.         }  
  41.     }  
  43.     /** 
  44.      * 得到当前角色所管理的部门 
  45.      */  
  46.     public Department getScope(){  
  47.         if (nowUser != null) {  
  48.             return map.get(nowUser);  
  49.         } else {  
  50.             return null;  
  51.         }  
  52.     }  
  53. }  
  55. /** 
  56.  * 用户 
  57.  */  
  58. public class User {  
  59.     //当前用户角色  
  60.     private Role nowRole;  
  61.     //用户所属部门列表  
  62.     private List<Department> departmentList;  
  63.     //用户所属用户组列表  
  64.     private List<UserGroup> user;  
  65.     //用户拥有角色列表  
  66.     private List<Role> roleList;  
  67.     //用户在不同角色下,能管理的部门的关系Map  
  68.     private Map<Role,Department> map;  
  70.     /** Creates a new instance of User */  
  71.     public User() {  
  72.     }  
  74.     /** 
  75.      * 得到当前用户所管理的部门 
  76.      */  
  77.     public Department getScope(){  
  78.         if (nowRole != null) {  
  79.             return map.get(nowRole);  
  80.         } else {  
  81.             return null;  
  82.         }  
  83.     }  
  85.     /** 
  86.      * 得到当前用户的角色 
  87.      */  
  88.     public Role getNowRole() {  
  89.         return nowRole;  
  90.     }  
  92.     /** 
  93.      * 设置用户当前角色,但是角色必须在用户角色列表中 
  94.      */  
  95.     public void setNowRole(Role nowRole) {  
  96.         if (roleList.indexOf(nowRole) > -1) {  
  97.             this.nowRole = nowRole;  
  98.         }  
  99.     }     
 100. }  
 102. /** 
 104.  * 部门 
 105.  */  
 106. public class Department {  
 108.     private List<User> userList;  
 110.     /** Creates a new instance of Department */  
 111.     public Department() {  
 112.     }     
 113. }  
 115. /** 
 116.  * 资源 
 117.  */  
 118. public class Source {  
 120.     private List<Role> RoleList;  
 122.     private List<Menu> menuList;  
 124.     /** Creates a new instance of Source */  
 125.     public Source() {  
 126.     }     
 127. }  
 129. /** 
 130.  * 用户组 
 131.  */  
 132. public class UserGroup {  
 134.     private List<User> userList;  
 136.     private List<Role> roleList;  
 138.     /** Creates a new instance of UserGroup */  
 139.     public UserGroup() {  
 140.     }  
 142.     public List<User> getUserList() {  
 143.         return userList;  
 144.     }  
 146.     public void setUserList(List<User> userList) {  
 147.         this.userList = userList;  
 148.     }  
 149. }  
<p>

yananay
2007-08-03 13:16
有这么几个关键点

部门、用户、用户组 角色和资源

有几个问题:

1、资源 是什么呢?是个什么概念?

2、一个用户可以分配不同的角色,对吧?

3、一个用户只能属于一个部门?

4、一个用户可以属于多个用户组?

5、对于终端用户来说,所面对的就是“角色”吧?

6、权限检查的规则就是如果角色属于一个组,那么按照组的权限来检查,

否则就按照角色本身具有的权限来检查?

先把这些问题弄清楚。

那么在四色原型里,

角色似乎就是 Role

部门、用户、用户组 则是 PPT

资源是什么?我没看明白

分析好以后,我们可以从一个测试开始,来看看你到底想实现什么功能 :-)

[该贴被yananay于2007年08月03日 13:22修改过]

wlmouse
2007-08-04 21:17
可能是我说得不太清楚吧。

是这样的。首先,一个用户可以属于多个部门,一个用户可以属于多个组,也可以不属于任何组。资源就是用户的功能权限,比如添加新闻条目、管理人员信息之类的。

这个项目是用来统一配置其他项目的用户权限的。

目的是用户登录后,可以因自己的角色不同而对某一部门进行浏览。比如浏览这个部门的人员信息。但是换一个角色,就可能能对同一个部门做些管理,比如添加、修改人员信息。再换一个角色,那么就只能处理另一个部门了。

就是这么个东西。

以前是如果某人X只能管理A部门,那么就在A部门下配置一个管理员角色,然后把这个角色配置给X。如果X现在又必须管理B部门,那么就又要在B部门下配置角色,然后再配置给X。造成角色泛滥。所以现在只对角色配置权限,把角色、人员和部门之间的关系用其他方式处理,以减少角色太多造成的管理混乱。

yananay
2007-08-06 09:31
组和部门的关系是什么呢?

部门我们都知道是一个具体的概念,组是一个抽象的概念还是具体的概念呢?

猜你喜欢
3Go 1 2 3 下一页