项目设计,请指正一下。

    
wlmouse
07-08-02 11 452

这是公司最近做的一个项目的一个子项目。要求用这个统一管理项目的用户角色权限。
我看了别人的设计的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. }

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 下一页