文档库 最新最全的文档下载
当前位置:文档库 › 权限的表设计

权限的表设计

权限的表设计
权限的表设计

基于RBAC的权限分配:

在做权限分配时:首先需要几张表。见下图

用户表

角色表:

用户角色表:

角色权限表:

struts2 角色权限filter(过滤器)和interceptor(拦截器)

分类:mvc框架-struts22012-12-23 11:27 358人阅读评论(0) 收藏举报

Struts2项目通过使用Struts的if标签进行了session判断,使得未登录的用户不能看到页面,但是这种现仅仅在view层进行,如果未登录用户直接在地址栏输入登录用户才能访问的地址,那么相应的action还是会执行,仅仅是不让用户看到罢了。这样显然是不好的,所以研究了一下Struts2的权限验证。

权限最核心的是业务逻辑,具体用什么技术来实现就简单得多。

通常:用户与角色建立多对多关系,角色与业务模块构成多对多关系,权限管理在后者关系中。

对权限的拦截,如果系统请求量大,可以用Struts2拦截器来做,请求量小可以放在filter中。但一般单级拦截还不够,要做到更细粒度的权限控制,还需要多级拦截。

不大理解filter(过滤器)和interceptor(拦截器)的区别,遂google之。博文中有介绍:

1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。

2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。

3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能。

5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

为了学习决定把两种实现方式都试一下,然后再决定使用哪个。

权限验证的Filter实现:

web.xml代码片段

1

2

3SessionInvalidate

4filter.SessionCheckFilter

5

6checkSessionKey

7loginName

8

9

10redirectURL

11/entpLogin.jsp

12

13

14notCheckURLList

15

/entpLogin.jsp,/rois/loginEntp.action,/entpRegister.jsp,/test.jsp,/ rois/registerEntp.action

16

17

18

19

20SessionInvalidate

21/rois/*

22

23

24

25SessionInvalidate

26/jsp/*

27

SessionCheckFilter.java代码

28package filter;

29import java.io.IOException;

30import java.util.HashSet;

31import java.util.Set;

32import javax.servlet.Filter;

33import javax.servlet.FilterChain;

34import javax.servlet.FilterConfig;

35import javax.servlet.ServletException;

36import javax.servlet.ServletRequest;

37import javax.servlet.ServletResponse;

38import javax.servlet.http.HttpServletRequest;

39import javax.servlet.http.HttpServletResponse;

40import javax.servlet.http.HttpSession;

41/**

42 * 用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面配置参数

checkSessionKey 需检查的在 Session 中保存的关键字

43 * redirectURL 如果用户未登录,则重定向到指定的页面,URL不包括 ContextPath

notCheckURLList

44 * 不做检查的URL列表,以分号分开,并且 URL 中不包括 ContextPath

45 */

46public class SessionCheckFilter implements Filter {

47protected FilterConfig filterConfig = null;

48private String redirectURL = null;

49private Set notCheckURLList = new HashSet();

50private String sessionKey = null;

51@Override

52public void destroy() {

53 notCheckURLList.clear();

54 }

55@Override

56public void doFilter(ServletRequest servletRequest,

57 ServletResponse servletResponse, FilterChain filterChain)

58throws IOException, ServletException {

59 HttpServletRequest request = (HttpServletRequest) servletRequest;

60 HttpServletResponse response = (HttpServletResponse) servletResponse;

61 HttpSession session = request.getSession();

62if (sessionKey == null) {

63 filterChain.doFilter(request, response);

64return;

65 }

66if ((!checkRequestURIIntNotFilterList(request))

67 && session.getAttribute(sessionKey) == null) {

68 response.sendRedirect(request.getContextPath() + redirectURL);

69return;

70 }

71 filterChain.doFilter(servletRequest, servletResponse);

72 }

73private boolean checkRequestURIIntNotFilterList(HttpServletRequest request) {

74 String uri = request.getServletPath()

75 + (request.getPathInfo() == null ? "" : request.getPathInfo());

76 String temp = request.getRequestURI();

77 temp = temp.substring(request.getContextPath().length() + 1);

78// System.out.println("是否包括:

"+uri+";"+notCheckURLList+"=="+notCheckURLList.contains(uri));

79return notCheckURLList.contains(uri);

80 }

81@Override

82public void init(FilterConfig filterConfig) throws ServletException {

83this.filterConfig = filterConfig;

84 redirectURL = filterConfig.getInitParameter("redirectURL");

85 sessionKey = filterConfig.getInitParameter("checkSessionKey");

86 String notCheckURLListStr = filterConfig

87 .getInitParameter("notCheckURLList");

88if (notCheckURLListStr != null) {

89 System.out.println(notCheckURLListStr);

90 String[] params = notCheckURLListStr.split(",");

91for (int i = 0; i < params.length; i++) {

92 notCheckURLList.add(params[i].trim());

93 }

94 }

95 }

96}

权限验证的Interceptor实现:

使用Interceptor不需要更改web.xml,只需要对struts.xml进行配置

struts.xml片段

97

98

99

100

class="interceptor.AuthInterceptor"/>

101

102

103

104

105

106 107

108

109/error.jsp

110/Login.jsp

111

112

113true

114/WEB-INF/jsp/welcome.jsp

115/Login.jsp

116

117

118/WEB-INF/viewBook.jsp

119

AuthInterceptor.java代码

120package interceptor;

121import java.util.Map;

122import com.opensymphony.xwork2.Action;

123import com.opensymphony.xwork2.ActionContext;

124import com.opensymphony.xwork2.ActionInvocation;

125import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

126public class AuthInterceptor extends AbstractInterceptor {

127private static final long serialVersionUID = -5114658085937727056L;

128private String sessionKey="loginName";

129private String parmKey="withoutAuthentication";

130private boolean excluded;

131@Override

132public String intercept(ActionInvocation invocation) throws Exception { 133

134 ActionContext ac=invocation.getInvocationContext();

135 Map session =ac.getSession();

136 String parm=(String) ac.getParameters().get(parmKey);

137

138if(parm!=null){

139 excluded=parm.toUpperCase().equals("TRUE");

140 }

141

142 String user=(String)session.get(sessionKey);

143if(excluded || user!=null){

144return invocation.invoke();

145 }

146 ac.put("tip", "您还没有登录!");

147//直接返回 login 的逻辑视图

148return Action.LOGIN;

149 }

150}

使用自定义的default-interceptor的话有需要注意几点:

1.一定要引用一下Sturts2自带defaultStack。否则会用不了Struts2自带的拦截器。

2.一旦在某个包下定义了上面的默认拦截器栈,在该包下的所有Action 都会自动增加权限

检查功能。所以有可能会出现永远登录不了的情况。

解决方案:

1.像上面的代码一样,在action里面增加一个参数表明不需要验证,然后在interceptor实现类里面检查是否不需要验证

2.将那些不需要使用权限控制的Action 定义在另一个包中,这个新的包中依然使用Struts 2 原有的默认拦截器栈,将不会有权限控制功能。

3.Interceptor是针对action的拦截,如果知道jsp地址的话在URL栏直接输入JSP的地址,那么权限验证是没有效果滴!

解决方案:把所有page代码(jsp)放到WEB-INF下面,这个目录下的东西是“看不见”的

关于用户权限的数据库设计

1 设计思路 为了设计一套具有较强可扩展性的用户认证管理,需要建立用户、角色和权限等数据库表,并且建立之间的关系,具体实现如下。 1.1 用户 用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名、密码等,权限是被分离出去了的。用户(User)要拥有对某种资源的权限,必须通过角色(Role)去关联。 用户通常具有以下属性: 编号,在系统中唯一。 ü名称,在系统中唯一。 ü用户口令。 ü注释,描述用户或角色的信息。 1.2 角色 角色是使用权限的基本单位,拥有一定数量的权限,通过角色赋予用户权限,通常具有以下属性: ü编号,在系统中唯一。 ü名称,在系统中唯一。 ü注释,描述角色信息 1.3 权限 权限指用户根据角色获得对程序某些功能的操作,例如对文件的读、写、 修改和删除功能,通常具有以下属性: ü编号,在系统中唯一。 ü名称,在系统中唯一。 ü注释,描述权限信息 1.4 用户与角色的关系 一个用户(User)可以隶属于多个角色(Role),一个角色组也可拥有多个用户,用户角色就是用来描述他们之间隶属关系的对象。用户(User)通过角色(Role)关联所拥有对某种资源的权限,例如 l 用户(User): UserID UserName UserPwd 1 张三 xxxxxx 2 李四 xxxxxx …… l 角色(Role): RoleID RoleName RoleNote 01 系统管理员监控系统维护管理员 02 监控人员在线监控人员 03 调度人员调度工作人员 04 一般工作人员工作人员…… 从该关系表可以看出,用户所拥有的特定资源可以通过用户角色来关联。 1.5 权限与角色的关系 一个角色(Role)可以拥有多个权限(Permission),同样一个权限可分配给多个角色。例如: l 角色(Role): RoleID RoleName RoleNote 01 系统管理员监控系统维护管理员 02 监控人员在线监控人员

一种通用权限管理方案的设计方案

一种通用权限管理方案的设计方案 分析了权限管理的概念和一些与权限管理容易混淆的概念。提出了一种目前可以应用到绝大多数与权限有关的系统设计中的通用权限管理方案。该方案以角色对用户进行分组,通过用户数据库、角色数据库、权限数据库、用户-权限数据库以及角色-权限数据库来实现权限的分层管理。该设计方案能够由管理员方便的对权限进行设置。通过对角色的权限设置可以达到快速设置权限。通过对用户的权限设置可以达到权限的精确控制。文章最后以某项目为基础对该权限设计方案进行了实现。通过测试,该方案能够很好的对用户权限进行控制,从而提高整个系统的安全性。 标签:权限系统角色数据库 1 权限管理的概念 权限管理是软件系统中最常见的功能之一。所谓权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源,不多不少。权限管理几乎出现在任何系统里面,只要有用户和密码的系统。尤其是在B/S机构的系统中,由于没有专门的客户端软件系统,所以权限管理就显的尤为重要。如果一个B/S系统的权限管理设计的不好,那么一个“非法用户”就可以轻而易举的获取整个系统的所有本能,包括超级管理员的功能。那么这样的系统还有谁敢使用。 很多人,常将“用户身份认证”、“密码加密”、“系统管理”等概念与权限管理概念混淆。用户身份认证,根本就不属于权限管理范畴。用户身份认证,是要解决这样的问题:用户告诉系统“我是谁”,系统就问用户凭什么证明你就是“谁”呢?对于采用用户名、密码验证的系统,那么就是出示密码。当用户名和密码匹配,则证明当前用户是谁;对于采用指纹等系统,则出示指纹;对于硬件Key 等刷卡系统,则需要刷卡。密码加密,是隶属用户身份认证领域,不属于权限管理范畴。 2 权限管理的设计 2.1 权限管理的对象在一般的系统设计中,权限管理的参于对象包括用户对象、角色(或分组)对象、功能模块对象。角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色。功能模块则对不同的系统来说各不相同,一般在系统设计中最终将其以图形界元素的形式表现出来(比如软件界面上的各个功能按钮)。 2.2 权限管理举例下面我们举例说明2.1中提到的用户、角色、功能三个对象在权限管理中具体应用。表1中列出了某文档管理项目中权限管理的一部分设计表。从中我们可以清晰的区别出这三个对象以及它们的各自作用。

JAVA用户角色权限数据库设计

实现业务系统中的用户权限管理 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。 需求陈述 ?不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。 ?可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。 ?权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。 就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。 ?满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。 关于设计 借助NoahWeb的动作编程理念,在设计阶段,系统设计人员无须考虑程序结构的设计,而是从程序流程以及数据库结构开始入手。为了实现需求,数据库的设计可谓及其重要,无论是“组”操作的概念,还是整套权限管理系统的重用性,都在于数据库的设计。 我们先来分析一下数据库结构: 首先,action表(以下简称为“权限表”),gorupmanager表(以下简称为“管理组表”),以及master表(以下简称为“人员表”),是三张实体表,它们依次记录着“权限”的信息,“管理组”的信息和“人员”的信息。如下图:

RBAC用户角色权限设计方案(非常好)

扩展RBAC用户角色权限设计方案 RBAC (Role-Based Access Control ,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图)

角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,“超级管理员”、“版主”都是角色。版主可 管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用户,可将“版主”这个 角色赋予该用户。 当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,每个用户组内有 多个用用户表 用户ID 範加刖 用户名 VAKCJUJG GO) 角邑表 疣Jg KU ■郦 行恳 律邑朽VABOW^O) 权眼表 用戶角色吴说 用/Tnf NUM 血氏 宦色 m MUMPER 权限捺识VARCKAR2(5O)

户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系)

用户亀 用,口?血 IF 用尸廻名称 则G01 敦用户绢茗称imiEEH 用尸角色关联表 SPTB mBER <£kl> 角色IE ?0EIt <£k2> 用户组TD2 MJWBER <£kt> 用 FID2 HUMBER ]甬户蛆帽色关联炭 用尸注D IBIBER 甬色ID mWER FK 瀏 EEF USn 用戶表 ^.PlD 利町四 fflPa ¥血诙应伽] 箱 felD NW 耶 yk ; 隹色客 mCHkR2UU J FK UE EEf SOLE 用户鉅与用户关朕表 y. rK_SR_ta_CRDUF 角色董 FK_UR_ USER

关于用户权限的数据库设计

1设计思路 为了设计一套具有较强可扩展性的用户认证管理,需要建立用户、角色和权限等数据库表,并且建立之间的关系,具体实现如下。 1.1用户 用户仅仅是纯粹的用户,用来记录用户相关信息,如用户名、密码等,权限是被分离出去了的。用户(User)要拥有对某种资源的权限,必须通过角色(Role)去关联。 用户通常具有以下属性: 编号,在系统中唯一。 ü名称,在系统中唯一。 ü用户口令。 ü注释,描述用户或角色的信息。 1.2角色 角色是使用权限的基本单位,拥有一定数量的权限,通过角色赋予用户权限,通常具有以下属性: ü编号,在系统中唯一。 ü名称,在系统中唯一。 ü注释,描述角色信息 1.3权限 权限指用户根据角色获得对程序某些功能的操作,例如对文件的读、写、 修改和删除功能,通常具有以下属性: ü编号,在系统中唯一。 ü名称,在系统中唯一。 ü注释,描述权限信息 1.4用户与角色的关系 一个用户(User)可以隶属于多个角色(Role),一个角色组也可拥有多个用户,用户角色就是用来描述他们之间隶属关系的对象。用户(User)通过角色(Role)关联所拥有对某种资源的权限,例如l用户(User): UserID UserName UserPwd 1张三xxxxxx 2李四xxxxxx …… l角色(Role): RoleID RoleName RoleNote 01系统管理员监控系统维护管理员 02监控人员在线监控人员 03调度人员调度工作人员 04一般工作人员工作人员…… 从该关系表可以看出,用户所拥有的特定资源可以通过用户角色来关联。 1.5权限与角色的关系 一个角色(Role)可以拥有多个权限(Permission),同样一个权限可分配给多个角色。例如:l角色(Role): RoleID RoleName RoleNote 01系统管理员监控系统维护管理员 02监控人员在线监控人员

系统权限管理设计方案(优选.)

OA系统权限管理设计方案 l 不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。 l 可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。 l 权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。 l 满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。 针对OA系统的特点,权限说明: 权限 在系统中,权限通过模块+动作来产生,模块就是整个系统中的一个子模块,可能对应一个菜单,动作也就是整个模块中(在B/S系统中也就是一个页面的所有操作,比如“浏览、添加、修改、删除”等)。将模块与之组合可以产生此模块下的所有权限。 权限组 为了更方便的权限的管理,另将一个模块下的所有权限组合一起,组成一个“权限组”,也就是一个模块管理权限,包括所有基本权限操作。比如一个权限组(用户管理),包括用户的浏览、添加、删除、修改、审核等操作权限,一个权限组也是一个权限。

角色 权限的集合,角色与角色之间属于平级关系,可以将基本权限或权限组添加到一个角色中,用于方便权限的分配。 用户组 将某一类型的人、具有相同特征人组合一起的集合体。通过对组授予权限(角色),快速使一类人具有相同的权限,来简化对用户授予权限的繁琐性、耗时性。用户组的划分,可以按职位、项目或其它来实现。用户可以属于某一个组或多个组。 通过给某个人赋予权限,有4种方式(参考飞思办公系统) A. 通过职位 a) 在职位中,职位成员的权限继承当前所在职位的权限,对于下级职位拥有的权限不可继承。 b) 实例中:如前台这个职位,对于考勤查询有权限,则可以通过对前台这个职位设置考勤查询的浏览权,使他们有使用这个对象的权限,然后再设置个,考勤查询权(当然也可以不设置,默认能进此模块的就能查询),则所有前台人员都拥有考勤查询的权利。 B. 通过项目 a) 在项目中,项目成员的权限来自于所在项目的权限,他们同样不能继承下级项目的权限,而对于项目组长,他对项目有全权,对下级项目也一样。 b) 实例中:在项目中,项目成员可以对项目中上传文档,查看本项目的文档,可以通过对项目设置一个对于本项目的浏览权来实现进口,这样每个成员能访问这个项目了,再加上项目文档的上传权和查看文档权即可。

最经典用户权限管理模块设计

实现业务系统中的用户权限管理--设计篇 B/S系统中的权限比C/S中的更显的重要,C/S系统因为具有特殊的客户端,所以访问用户的权限检测可以通过客户端实现或通过客户端+服务器检测实现,而B/S中,浏览器是每一台计算机都已具备的,如果不建立一个完整的权限检测,那么一个“非法用户”很可能就能通过浏览器轻易访问到B/S系统中的所有功能。因此B/S业务系统都需要有一个或多个权限系统来实现访问权限检测,让经过授权的用户可以正常合法的使用已授权功能,而对那些未经授权的“非法用户”将会将他们彻底的“拒之门外”。下面就让我们一起了解一下如何设计可以满足大部分B/S系统中对用户功能权限控制的权限系统。 需求陈述 ?不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。 ?可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便 的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致 的人员编入同一组,然后对该组进行权限分配。 ?权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套 管理系统,就要针对权限管理部分进行重新开发。 ?满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统 之间,功能权限是可以重用的,而资源权限则不能。 关于设计 借助NoahWeb的动作编程理念,在设计阶段,系统设计人员无须考虑程序结构的设计,而是从程序流程以及数据库结构开始入手。为了实现需求,数据库的设计可谓及其重要,无论是“组”操作的概念,还是整套权限管理系统的重用性,都在于数据库的设计。 我们先来分析一下数据库结构: 首先,action表(以下简称为“权限表”),gorupmanager表(以下简称为“管理组表”),以及master表(以下简称为“人员表”),是三张实体表,它们依次记录着“权限”的信息,“管理组”的信息和“人员”的信息。如下图:

权限管理设计说明

对EMS权限管理模块设计 1.权限设计概述 1.1引言 随着Web 服务的复杂度增加以及用户数量和种类的增多,安全问题在理论及工程上都 是一个必须考虑的问题,而权限管理是安全问题中一个很重要的方面。因此本文针对权限做 了一个分析。 权限可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的 逻辑表达式是否为真。 1.2意义 ?用户管理及权限管理一直是应用系统中不可缺少的一个部分 ?系统用户很多,系统功能也很多 ?不同用户对系统功能的需求不同 ?出于安全等考虑,关键的、重要的系统功能需限制部分用户的使用 ?出于方便性考虑,系统功能需要根据不同的用户而定制 1.3目标 直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要, 除了功能的必须,更主要的就是因为它足够直观。 简单,包括概念数量上的简单和意义上的简单还有功能上的简单。想用一个权限系统解 决所有的权限问题是不现实的。设计中将变化的“定制”特点比较强的部分判断为业务逻辑, 而将相同的“通用”特点比较强的部分判断为权限逻辑就是基于这样的思路。 扩展,采用可继承的方式解决了权限在扩展上的困难。引进Group概念在支持权限以组 方式定义的同时有效避免了权限的重复定义。 2.基于角色的权限管理设计(Role-Based Access Control,RBAC)2.1权限管理用例图

2.2用例图描述 超级管理员:系统中默认的角色,它是系统中拥有最高权限的角色,它不仅能够管理其他的管理员和用户,而且还可以对系统中每个模块的任一功能进行操作、维护。 普通管理员:它是由超级管理员创建的,并授予权限,它能够管理系统部分的功能,它可以查看所有普通管理员、普通用户的信息,它只能对由它自己创建的用户进行编辑、删除操作,和管理拥有权限的模块。 普通用户:它是系统中最低权限的角色,它只能对自己拥有的权限进行操作,一般情况下,它的权限是对信息的浏览和对自己信息的录入,修改。 登陆系统:根据用户拥有的权限不同,用户所能操作的功能多少就不同,所以在登陆系统的时候就要对用户的权限进行判断。

多系统权限设计

多系统权限设计 1.多系统基于角色的权限设计 这种方案是最常见也是比较简单的方案,不过通常有这种设计已经够了,这种方案对于每一个操作不做控制,只是在程序中根据角色对是否具有操作的权限进行控制;这里我们就不做详述.此处采用角色关联模块的方式。 2.多系统基于操作的权限设计 这种模式下每一个操作都在数据库中有记录,用户是否拥有该操作的权限也在数据库中有记录,结构如下:

但是如果直接使用上面的设计,会导致数据库中的_SysUserFuncOperate这张表数据量非常大,所以我们需要进一步设计提高效率,请看方案3 3.多系统基于角色和操作的权限设计

如上图所示,我们通过采用角色分配操作的方式,这样子就可以减少操作权限表(_SysRole FuncOperate)中的记录,并且使设计更灵活一点。 但是这种方案在用户需求的考验之下也可能显得不够灵活够用,例如当用户要求临时给某位普通员工某操作权限时,我们就需要新增加一种新的用户角色,但是这种用户角色是不必要的,因为它只是一种临时的角色,如果添加一种角色还需要在收回此普通员工权限时删除此角色,我们需要设计一种更合适的结构来满足用户对权限设置的要求。 4.2,3组合的权限设计,其结构如下: 我们可以看到在上图中添加了_SysUserFunc和_SysUserFuncOperate表,使用此表来添加特殊用户的权限。这样在应用程序中我们就需要通过_SysUserFuncOperate和_SysRoleFuncOperat e两张表中的记录判断权限。 当然,有可能用户还会给出这样的需求:对于某一种Operate所操作的对象某一些记录会有权限,而对于其他的记录没有权限,比如说一个内容管理系统,对于某一些频道某个用户有

用户、角色、权限数据库设计

用户、角色、权限数据库设计2010-02-08 15:20:32 分类:Linux 权限管理 权限管理,主要是人员和权限之间的关系,但是如果让人员直接和权限打交道,那么权限的赋值、权限的撤销以及权限的变动会非常的麻烦,这样引入了,角色,给角色赋权限,然后给用户分配角色。 这个设计主要涉及6张表, 用户表,(用于存储用户的所有信息) 权限表,(用于存储所有的权限) 角色表,(用于存储所有的角色) 用户和角色的关联表,(用户和角色的关联) 角色和权限的关联表,(角色和权限的关联) 菜单表,(里面关联了权限,主要是现实用的) 用户表 代码 CREATE TABLE[dbo].[Users]( [UserID][int]IDENTITY(1,1) NOT NULL, [UserName][nvarchar](50) primary key,--帐号 [Password][nvarchar](50) , [UserDspName][nvarchar](50) , [Sex][char](1), [Birthday][datetime], [Phone][nvarchar](20) , [Email][nvarchar](100), [EmployeeID][nvarchar](20) , [Activity][bit],--是否可用 [UserType][char](2) , [Style][nvarchar](50) ) 权限表: CREATE TABLE[dbo].[Permission]( [PermissionID]int identity,

[Description][nvarchar](50) --权限名称 ) 角色表: CREATE TABLE[dbo].[Roles]( [RoleID][int]IDENTITY, [Description][nvarchar](200)--角色名称 ) 用户和角色的关联表: 代码 CREATE TABLE[dbo].[UserRoles]( [UserID][int]NOT NULL,--用户ID [RoleID][int]not null ,--权限ID CONSTRAINT[PK_UserRoles]PRIMARY KEY CLUSTERED ( [UserID]ASC, [RoleID]ASC )WITH (IGNORE_DUP_KEY =OFF) ON[PRIMARY] ) ON[PRIMARY] 角色和权限的关联表: 代码 CREATE TABLE[dbo].[RolePermissions]( [RoleID]int NOT NULL,--角色ID [PermissionID]int NOT NULL,--权限ID CONSTRAINT[PK_RolePermissions]PRIMARY KEY CLUSTERED ( [RoleID]ASC, [PermissionID]ASC )WITH (IGNORE_DUP_KEY =OFF) ON[PRIMARY]

食堂管理系统数据库设计

一、需求分析 1.系统分析 随着时代的进步,如今各个服务行业也都逐渐发展壮大起来,尤其是食堂服务业,其在服务范围、服务数量和服务内容上都有着非常大的膨胀幅度,因此如何对如此复杂而频繁的服务活动进行管理就属于“食堂管理”的内容。其主要包括:职员资料管理、物品管理、消费内容管理、席位管理、客户评价管理,工资管理等,它是现代食堂管理中的一个重要组成部分。 2.功能需求分析 “食堂管理” 包括很多项目,以前食堂管理人员要记录大量的用户消费内容,然后通过计算器进行一系列的加减乘除运算,最后得出一位顾客的“应付金额”,这样做的效率和准确度可想而知。如果使用计算机来实现对食堂服务业的智能管理,从选择菜、酒水、主食,到计算“应付金额”,最后到打印消费内容,计算机都可以很准确、很快捷地进行处理,这些都是“食堂管理系统”的功能。一个完善的“食堂管理系统”可以很好地管理食堂服务业的各项内容,这样不仅能更好地服务顾客,而且可以为经营者创造更大的利润。 针对每部分的具体功能我们又做了如下的详细分析:

二、涉及的表 职员资料 物品表 席位表

销售记录 评价情况 工资表

SQL 命令 创建数据库 create database 食堂管理系统 on primary (name= stglxt_data,'e:\stglxt_data.mdf') log on (name=stglxt_log1,'e:\stglxt _log.ldf') 创建表 create table 职员资料 (职员编号char(6) not null primary key check(职员编号like'[0-9][0-9][0-9][0-9][0-9][0-9]'), 姓名varchar(20) not null, 职位varchar(20) not null, 性别char(2) not null check(性别='男' or 性别='女') default '男', 民族varchar(8) null default '汉族', 出生日期datetime not null, 身份证号码char(18) not null unique, 婚姻状况char(4) not null check(婚姻状况='已婚' or 婚姻状况='未婚') default '未婚', 联系电话varchar(11) not null unique, 备注varchar(30) ) create table 物品表 (物品编号 char(6) not null primary key, 物品名字 varchar(20) not null, 所属类型 char(4) not null check(所属类型='主食'or 所属类型='酒水' or 所属类型='其他') default '主食', 价格 money not null, 是否售馨 char(2) not null check(是否售馨='是' or 是否售馨='否') default '否', 品牌 varchar(30), 备注 varchar(30) ) create table 席位表 (席位号char(6) not null primary key, 负责人编号char(6) not null foreign key references 职员资料(职员编号) on update cascade on delete cascade, 人数int not null, 状态char(4) not null check(状态='使用' or 状态='预定' or 状态='空闲') default '空闲', 日期datetime not null, 备注varchar(30)

用友用户角色权限

admin超级管理员的意思 简单的说:Admin是Administrator的简写形式,其中文意思就是“系统管理员”。 Admin与账套主管的区别 ADMIN是系统初始化时默认的用户,可以增加、修改、删除操作员及员工档案等基础数据维护,建立账套管用户为各用户授权、还有对同步打印模块的设置和维护,但不可以查询报表等操作账套主管的权限最大,拥有ADMIN的所有权限(除同步打印模块维护指定ADMIN外)、日常业务、基础数据维护、报表查询等 admin 是系统初始化时默认的用户 可以登陆软件的系统管理中增加、修改、删除操作员及员工档案等基础数据维护建立新的账套,指定操作员为某账套的账套主管 为新账套操作员用户授权 备份、恢复已存在所有的账套数据,清除异常任务 admin不参与具体的账务日常业务操作,只在系统管理中使用 账套主管 针对某个账套的权限最大,拥有账套操作的所有权限、日常业务、基础数据维护、 报表查询等 登陆系统管理可以对操作员授权 做年度账套新建、结转年初数 2010-04-13 08:34

用友软件系统管理员admin和账套主管的权限区别 系统管理员admin和账套主管的权限区别2009年07月18日星期六14:54 用友软件系统管理员admin和账套主管的权限区别 从前面的介绍中,可以看到在系统管理中,有些操作需要系统管理员admin来注册,而有些操作需要账套主管来登陆。现在就把这两个操作员的权限区别列示如下: 功能操作员建立账套备份、恢复账套角色操作用户操作权限操作修改账套清除异常任务和单据锁定年度账管理结转上年数据系统管理员admin 系统管理概述 用友ERP-U8软件产品是由多个产品组成,各个产品之间相互联系、数据共享,完全实现财务业务一体化的管理。对于企业资金流、物流、信息流的统一管理提供了有效的方法和工具。系统管理包括新建账套、新建年度账、账套修改和删除、账套备份,根据企业经营管理中的不同岗位职能建立不同角色,新建操作员和权限的分配等功能。系统管理的使用者为企业的信息管理人员:系统管理员Admin、安全管理员admin、管理员用户和账套主管。 系统管理模块主要能够实现如下功能: ?对账套的统一管理,包括建立、修改、引入和输出(恢复备份和备份)。 ?对操作员及其功能权限实行统一管理,设立统一的安全机制,包括用户、角色和权限设置。 ?允许设置自动备份计划,系统根据这些设置定期进行自动备份处理,实现账套的自动备份。 ?对年度账的管理,包括建立、引入、输出年度账,结转上年数据,清空年度数据。 ?对系统任务的管理,包括查看当前运行任务、清除指定任务、清退站点等。

权限的表设计

基于RBAC的权限分配: 在做权限分配时:首先需要几张表。见下图 用户表 角色表:

用户角色表: 角色权限表:

struts2 角色权限filter(过滤器)和interceptor(拦截器) 分类:mvc框架-struts22012-12-23 11:27 358人阅读评论(0) 收藏举报 Struts2项目通过使用Struts的if标签进行了session判断,使得未登录的用户不能看到页面,但是这种现仅仅在view层进行,如果未登录用户直接在地址栏输入登录用户才能访问的地址,那么相应的action还是会执行,仅仅是不让用户看到罢了。这样显然是不好的,所以研究了一下Struts2的权限验证。 权限最核心的是业务逻辑,具体用什么技术来实现就简单得多。 通常:用户与角色建立多对多关系,角色与业务模块构成多对多关系,权限管理在后者关系中。 对权限的拦截,如果系统请求量大,可以用Struts2拦截器来做,请求量小可以放在filter中。但一般单级拦截还不够,要做到更细粒度的权限控制,还需要多级拦截。

不大理解filter(过滤器)和interceptor(拦截器)的区别,遂google之。博文中有介绍: 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调。 2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器。 3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。 4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能。 5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。 为了学习决定把两种实现方式都试一下,然后再决定使用哪个。 权限验证的Filter实现: web.xml代码片段 1 2 3SessionInvalidate 4filter.SessionCheckFilter 5 6checkSessionKey 7loginName 8 9 10redirectURL 11/entpLogin.jsp 12 13 14notCheckURLList 15 /entpLogin.jsp,/rois/loginEntp.action,/entpRegister.jsp,/test.jsp,/ rois/registerEntp.action 16 17 18 19

仓库管理系统数据库设计

仓库管理系统数据库设计 1概述(设计题目与可行性分析) 1.1设计题目 设计一个仓库数据库管理系统,要求实现入库、出库、库存和采购等功能。 随着经济的飞速发展,,仓库管理变成了各大公司日益重要的内容。仓库管理过程的准确性和高效性至关重要。影响着公司的经济发展和管理。利用人工管理强大而数据烦琐的数据库显的效率过于低。利用计算机高效、准确的特点能够很好的满足公司的管理需要。提高公司各个员工的工作效率和公司的运做效率。利用计算机对仓库数据信息进行管理具有着手工管理所无法比拟的优点。目前一个现代化的仓库管理系统已经成为仓库管理不可缺少的管理手段。 1.2 可行性研究 可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。可行性研究的目的不是解决问题而是分析问题能不能解决;至少从下面三个方面分析可行性研究。 1.2.1技术可行性 该仓库数据库管理系统不不是很复杂,设计实现该数据库技术难度不是很大,利用目前现有的技术和工具能在规定的时间内做出该系统。该系统利用SQL2000和 visual studio 工具就能很好的实现该系统。 1.2.2经济可行性 当今世界是经济时代,一个公司的员工工作效率的高低直接影响着这个公司的发展。因此利用计算机进行信息管理有着无可比拟的好处,该系统相对较小,代码行较少,数据库设计不是很麻烦,开发周期较短。而且便于维护。但其带来的经济效益远远高于其开发成本。在经济上是可行的。 1.2.3操作可行性 在当今社会,随着义务教育的普及。和计算机的普及,公司的员工基本上都会进行电脑的基本操作,由于本软件系统采用相对友好的界面,用户 在使用过程中不需要懂太多的电脑专业知识,只需要基本的电脑操作就可

系统权限管理设计方案.doc

OA系统权限管理设计方案7 OA系统权限管理设计方案 数据库2010-02-2310:09:25阅读13评论0字号:大中小 OA系统权限管理设计方案 l不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统,这是最基本的功能。 l可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。 l权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。 l满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。 针对OA系统的特点,权限说明: 权限

在系统中,权限通过模块+动作来产生,模块就是整个系统中的一个子模块,可能对应一个菜单,动作也就是整个模块中(在B/S系统中也就是一个页面的所有操作,比如“浏览、添加、修改、删除”等)。将模块与之组合可以产生此模块下的所有权限。 权限组 为了更方便的权限的管理,另将一个模块下的所有权限组合一起,组成一个“权限组”,也就是一个模块管理权限,包括所有基本权限操作。比如一个权限组(用户管理),包括用户的浏览、添加、删除、修改、审核等操作权限,一个权限组也是一个权限。 角色 权限的集合,角色与角色之间属于平级关系,可以将基本权限或权限组添加到一个角色中,用于方便权限的分配。 用户组 将某一类型的人、具有相同特征人组合一起的集合体。通过对组授予权限(角色),快速使一类人具有相同的权限,来简化对用户授予权限的繁琐性、耗时性。用户组的划分,可以按职位、项目或其它来实现。用户可以属于某一个组或多个组。 通过给某个人赋予权限,有4种方式(参考飞思办公系统) A.通过职位 a)在职位中,职位成员的权限继承当前所在职位的权限,对

权限表设计

权限表设计 2009-09-21 16:14 最简单的权限验证,应该是登录态的验证,如果登录,则可以怎样,没有登录,则不能怎样: if ($isLogin === true) { //do something } else { //do nothing } 一般使用会话或者Cookie来保存登录态,具体实现不在此文讨论范围。一般权限都和人挂勾,首先识别你是谁,然后看你有能力做什么,然后再确认你的能力在这个地方是否可以使,一个权限验证算是基本上完成。我们围绕这几点来看权限如何去设计。 首先要能识别操作者是何许人,我们需要一张保存操作者信息的表,也就是通常所说的用户表。简单的用户表如下: CREATE TABLE user ( userId int(10) unsigned NOT NULL, username varchar(255) NOT NULL, PRIMARY KEY (userId) ) 一般使用一个用户ID来标识一个唯一的用户,可以使用数字,或者直接使用用户名作为主键(如果用户名不重复)。这里我们使用userId来唯一标识一个用户。 有了用户以后,接下来需要确认这个用户所具有的能力,也就是权限,那么首先我们需要列一下我们的系统总共需要几个权限,比如增、删、改、查等。增加一张权限表: CREATE TABLE permission ( permissionId int(10) unsigned NOT NULL , permissionName varchar(255) NOT NULL , PRIMARY KEY (permissionId) ) 同样的我们以permissionId作为主键来唯一标识一个权限,当然也可以使用permissionName来标识(如果你能确定唯一的话)。我们新增几条记录在这张表里: +--------------+----------------+ | permissionId | permissionName | +--------------+----------------+ | 1 | add | | 2 | del | | 3 | modify | | 4 | select | +--------------+----------------+

基于web信息管理系统的权限设计分析和总结

基于web信息管理系统的权限设计分析和总结 /archive/2009/06/15/1503308.html 在blog中看到有人写到web权限管理的一些文章,这里把我曾经做过的一些权限管理作一下总结,欢迎拍砖。 这里讨论的权限只涉及到信息管理系统里面的权限管理,超出此范围的权限管理暂不涉及。 1、权限的应用对象 上面我们已经定义了权限的范围,就是信息系统管理里面的表单操作,那么权限的应用对象就是表单,更进一步说,就是表达表单内容的web管理页面。 2、权限的分类 一个页面的权限范围分为以下几种,也可以叫做基本权限单位。 ●操作权限:操作权限是一种页面级别的权限,也可以叫做页面权限。包 括以下几种 ?新增 ?修改 ?删除 ?查询 在此基础上还可以进行更加详细的一些分类,比如查看他人记录的权限,修改他人记录的权限等。这部分也可以使用下面的记录权限来实现。 ●按钮权限:针对页面上按钮的权限管理,包括 ?是否可见 ?是否可用

有时候,我们可以把按钮权限看作为字段权限。 ●字段权限:字段在页面的不同状态(新增,修改,查询)下面的各种状 态管理。包括 ?是否可见 ?是否可修改 ●记录权限:记录权限是指用户对某些记录的查看和修改权限。比如客户 关系管理系统中,不同界别的系统用户可以看到不同的记录,例如上司可以看他所有下级员工的客户列表等。 3、权限的实现模型 上面的权限分类大概对涉及到页面元素的权限进行了一个比较全面的概括。另外一个问题就是权限管理的实现模型。在大部分的系统中都是用的基于角色控制模型的权限管理。在这样的系统中,创建一系列的角色,然后把基本权限单位分配给这些角色,再把角色分配给用户,这样用户登录系统后,就根据当前用户所拥有的角色可以定位出权限。 在针对信息管理系统中,权限模型有自己的特色,除了角色的概念以外,还有表单权限的概面。第一节里面所讨论的各种权限基本单位不但可以应用到角色上,也可以应用到表单上。 对于应用到表单上的基本权限单位,我们叫做表单的固有权限属性(静态权限)。对于应用到角色上的基本权限单位,我们叫做角色权限属性(动态权限)。用下图来表示: 根据上面的模型,一个用户登录到系统中后,得到某一个表单的权限就和这个表单的固有权限属性和这样用户所拥有的角色有关。 4、权限的计算方式 用户登录后对一个表单进行操作,静态权限只有一个,即表单本身的权限属性,动态权限可以有多个,即用户可以同时属于多个角色,这些角色在这个表单上都

OA权限的表结构设计

任何系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系 统操作自如,管理方便,也为系统添加亮点。 ●不同职责的人员,对于系统操作的权限应该是不同的。优秀的业务系统, 这是最基本的功能。 ●可以对“组”进行权限分配。对于一个大企业的业务系统来说,如果要求 管理员为其下员工逐一分配系统操作权限的话,是件耗时且不够方便的事情。所以,系统中就提出了对“组”进行操作的概念,将权限一致的人员编入同一组,然后对该组进行权限分配。 ●权限管理系统应该是可扩展的。它应该可以加入到任何带有权限管理功能 的系统中。就像是组件一样的可以被不断的重用,而不是每开发一套管理系统,就要针对权限管理部分进行重新开发。 ●满足业务系统中的功能权限。传统业务系统中,存在着两种权限管理,其 一是功能权限的管理,而另外一种则是资源权限的管理,在不同系统之间,功能权限是可以重用的,而资源权限则不能。 针对OA系统的特点,权限说明: 权限 在系统中,权限通过模块+动作来产生,模块就是整个系统中的一个子模块,可能对应一个菜单,动作也就是整个模块中(在B/S系统中也就是一个页面的所有操作,比如“浏览、添加、修改、删除”等)。将模块与之组合可以产生此模块下的所有权限。 权限组 为了更方便的权限的管理,另将一个模块下的所有权限组合一起,组成一个“权限组”,也就是一个模块管理权限,包括所有基本权限操作。比如一个权限组(用户管理),包括用户的浏览、添加、删除、修改、审核等操作权限,一个权限组也是一个权限。 角色 权限的集合,角色与角色之间属于平级关系,可以将基本权限或权限组添加到一个角色中,用于方便权限的分配。 用户组 将某一类型的人、具有相同特征人组合一起的集合体。通过对组授予权限(角色),快速使一类人具有相同的权限,来简化对用户授予权限的繁琐性、耗时性。用户组的划分,可以按职位、项目或其它来实现。用户可以属于某一个组或多个组。 通过给某个人赋予权限,有4种方式(参考飞思办公系统) A.通过职位 a)在职位中,职位成员的权限继承当前所在职位的权限,对于下级职位 拥有的权限不可继承。 b)实例中:如前台这个职位,对于考勤查询有权限,则可以通过对前台这 个职位设置考勤查询的浏览权,使他们有使用这个对象的权限,然后再

相关文档