在管理信息系统开发过程中,对于用户权限的控制是一个难点。
1)简单情况下我们设计成多个用户可以多个权限,即用户与权限直接存在多对多关系
a、User对象与Privilege对象定义为:
public class User{
private Long id;
private String name;
private Set<Privilege> privilegeSet=new Set<Privilege>();
}
public class Privilege{
private Long id;
private String name;
private String uri;
private Set<User> userSet=new Set<User>();
}
b、即表关系:
user:id name
privilege:id name uri(路径)
user_privilege:uid pid(形成联合主键)
c、Hibernate中的映射:
User.hbm.xml:
<class name="User" table="tb_user">
<key name="id" type="Long">
<generator class="native"/>
</key>
<property name="name" type="string" length="30"/>
<set name="privilegeSet" table="user_privilege" lazy="false">
<id key="uid"/>
<many-to-many class="Privilege" colunm="pid" />
</set>
</class>
Privilege.hbm.xml:
<class name="Privilege" table="tb_privilege" >
<key name="id">
<generator class="native"/>
</key>
<property name="name" tyep="string" length="30"/>
<property name="name" tyep="string" />
<set name="userSet" table="user_privilege" lazy="false">
<key column="pid">
<many-to-many class="User" column="uid"/>
</set>
</class>
d、启用懒加载,在查询用户信息的时候就查询出它对应的权限列表,即在用户登录时候用户对象就带有权限信息,此时可以一次判断用户拥有哪些信息。
2)在大型信息系统中,很多拥有权限相同的用户,我们可以定义一个角色来管理分配权限。
即一个角色拥有多个权限,一个权限可以属于多个角色。同时一个用户可以拥有多个角色,一个角色可以属于多个用户。
用户和角色之间存在多对多关系,角色和权限之间存在多对多关系
a、User、Privilege、Role类定义为:
public class User{
private Long id;
private String name;
private Set<Role> roleSet=new Set<Role>();
}
public class Privilege{
private Long id;
private String name;
private String uri;
private Set<Role> userSet=new Set<Role>();
}
public class Role{
private Long id;
private String name;
private Set<Privilege> privilegeSet=new Set<Privilege>();
private Set<User> userSet=new Set<User>();
}
b、即表关系:
user:id name
role:id name privilegeSet userSet
privilege:id name uri(路径)
role_privilege:rid pid(形成联合主键)
user_role:uid rid(形成联合主键)
c、Hibernate映射同1)相似
3)权限控制的办法:
1、配置一个服务器启动监听器实现ServletContextListener接口,在服务器启动时候执行contextInitialized()方法中,将要控制的权限的URL放到Application与对象中。
2、通过自定义Struts标签重写AnchorTag类的doEndTag()方法即控制超链接的标签<a>,方法中判断用户是否有权限访问Application中的URI.如果可以显示,否则不显
示。
3、通过定义拦截器,继承AbstractInterceptor类,重写intercept(Actioninvocation invocation)方法,在方法中对登录的用户权限做判断,如果有权限则放行资源return invocation.invoke();否则就跳到没有访问权限的配置页面privilegeError页面
<!-- 声明拦截器和拦截器栈 -->
<interceptors>
<!-- 声明检查权限的拦截器 -->
<interceptor name="PrivilegeInterceptor"
class="cn.caiz.oa.interceptor.PrivilegeInterceptor" />
<!-- 声明拦截器栈包含struts2默认的拦截器-->
<interceptor-stack name="myInterceptor">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="PrivilegeInterceptor" />
</interceptor-stack>
</interceptors>
// 通过url判断用户是否拥有该权限
public boolean hasPrivilegeByUrl(String url) {
boolean flag = false;
// 判断是否是超级管理员
if (isSuper()) {
flag = true;
} else {
// 检查是否有权限(服务器启动的时候已经所有权限的url列表放在application域对象中)
List<String> privilegeUrls = (List<String>) ActionContext
.getContext().getApplication().get("privilegeUrls");
// 如果该访问的url不需要控制则放行资源(即所有的权限列表中并没有)
if (!privilegeUrls.contains(url)) {
flag = true;
// 如果该访问的url需要控制则检查用户是否拥有该权限
} else {
//遍历所有的角色
for (Role role : roles) {
//遍历角色中的权限
for (Privilege privilege : role.getPrivileges()) {
if (url.equals(privilege.getUrl())) {
flag = true;
break;
}
}
}
}
}
return flag;
}
分享到:
相关推荐
【计算机科学与技术(OA系统用户权限控制流程与实现)实习报告】 实习报告涉及的核心知识点集中在OA系统(Office Automation System)的用户权限控制流程及其实际实现。实习者在中山市天启电子科技有限公司实习期间...
CRM用户权限控制设置 CRM(Customer Relationship Management,客户关系管理)系统的用户权限控制设置是指对CRM系统中的用户权限进行控制和管理,以确保系统的安全性和数据的保密性。在本文中,我们将介绍CRM系统的...
在IT行业中,用户权限控制是系统安全的重要组成部分,特别是在数据库管理、网站开发和企业级应用中。本实例“用户权限控制实例”旨在帮助初学者理解并掌握如何有效地实施权限管理系统。我们将探讨用户、角色和权限这...
用户权限控制组件是一种在软件开发中用于管理用户访问和操作权限的工具。它通常由一系列类和函数组成,能够帮助开发者快速实现权限的设定和控制,避免在代码中重复编写这些功能。在这个压缩包文件中,我们可以看到多...
Vue2.0用户权限控制解决方案是基于Vue/Vue-Router/axios实现的前端用户权限控制解决方案,通过对路由、视图、请求三个层面的控制,使开发者可以实现任意颗粒度的用户权限控制。本解决方案主要包括权限控制初始化、...
在IT行业中,用户权限控制是系统安全的重要组成部分,它确保只有授权的用户才能访问特定的资源或执行特定的操作。这个“用户权限控制框架”项目记录着重于如何构建一个高效、安全且灵活的权限管理系统。 首先,我们...
基于JAVA_XML技术的用户权限控制管理 本篇论文介绍了基于JAVA和XML技术的用户权限控制管理系统的设计和实现。该系统结合了JAVA语言和XML技术的优点,实现了用户权限控制管理的高效开发。 首先,论文介绍了JAVA语言...
Vue-Access-Control是一个基于Vue/Vue-Router/axios的前端用户权限控制解决方案,它包含66个文件,主要文件类型包括22个JavaScript文件、12个Vue文件、11个Map文件、6个CSS文件、2个Markdown文档、2个ICO图标、2个...
智慧景区管理系统源码+项目说明(已完成票务系统、设备管理、停车场管理、用户权限控制、设备权限控制、小程序售票等功能).zip智慧景区管理系统源码+项目说明(已完成票务系统、设备管理、停车场管理、用户权限控制...
"Linux超级用户权限控制"这一主题主要关注root用户,它是系统中的最高权限用户,拥有执行所有操作的能力。在Linux中,每个用户都有一个唯一的用户识别号(UID),UID为0的用户即为root,具有超级权限。root用户能够...
《OpenSymphony OSUSER:深度解析JAVA用户权限控制系统》 OpenSymphony OSUSER是一个基于JAVA开发的用户权限控制系统,它为开发者提供了一套强大的、灵活的权限管理框架,以实现对用户访问系统的精细化控制。OSUSER...
"SAP 用户权限控制设置及开发" SAP 用户权限控制设置及开发是 SAP 系统中的一项重要配置,旨在控制用户对系统的访问权限。通过设置权限控制,管理员可以控制用户对系统的访问权限,确保系统的安全性和数据的完整性...
### 医院信息系统中多用户权限控制的研究与实现 #### 一、引言 随着信息技术的发展,越来越多的企业和机构开始依赖计算机系统来进行日常管理和运营。医院作为重要的社会服务机构,其信息化建设尤为关键。传统的...
在IT行业中,用户权限控制是系统安全的重要组成部分,它涉及到如何有效地管理用户对资源的访问,确保只有授权的用户能够执行特定的操作。本篇将详细探讨这个主题,并结合"源码"和"工具"的角度来深入理解。 首先,...
本文将深入探讨基于Vue/Vue-Router/axios的前端用户权限控制解决方案——Vue-Access-Control。 首先,Vue.js是一个轻量级的渐进式JavaScript框架,它的核心库专注于视图层,易于上手且可与现有项目无缝集成。Vue-...
在Linux系统中,用户权限控制是安全性和协作性的重要组成部分。传统的权限模型基于所有者、组和其他用户这三类,但随着系统复杂性的增加,访问控制列表(ACL,Access Control List)提供了一种更为精细的权限管理...
在VFP中实现可靠的随机密码和多用户权限控制