在管理信息系统开发过程中,对于用户权限的控制是一个难点。
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;
}
分享到:
相关推荐
CRM用户权限控制设置,CRM用户权限控制设置
Vue-Access-Control是一个基于Vue/Vue-Router/axios的前端用户权限控制解决方案,它包含66个文件,主要文件类型包括22个JavaScript文件、12个Vue文件、11个Map文件、6个CSS文件、2个Markdown文档、2个ICO图标、2个...
智慧景区管理系统源码+项目说明(已完成票务系统、设备管理、停车场管理、用户权限控制、设备权限控制、小程序售票等功能).zip智慧景区管理系统源码+项目说明(已完成票务系统、设备管理、停车场管理、用户权限控制...
一份关于计算机专业的本科实习报告,题目是《OA系统用户权限控制流程与实现》,非常实用哦!
在VFP中实现可靠的随机密码和多用户权限控制
基于jsp+servlet实现的网上购物系统,包含用户权限控制源码+数据库.zip主要针对计算机相关专业的正在做毕设的学生和需要python项目实战练习的学习者。也可作为课程设计、期末大作业。包含全部项目源码、该项目可以...
Vue2.0用户权限控制解决方案 用addRoutes实现动态路由 可按要求显示对应的
带数据库代码,一个完善权限控制实例,初步学习权限控制的人可以看看 用户 角色 权限
数据仓库中用户权限控制模块的设计与实现,张京一,,随着企业业务的发展和运营人员数据分析挖掘需求的增加,传统的关系型数据库已经不能满足需求,基本的数据库访问控制已经不能很好
opensymphony JAVA用户权限控制系统 OSUSER 源码
网页中中文乱码问题和用户权限控制(使用fileter实现) 最基本的实现方法,如果还没有涉及具体用户权限框架的同学可以先参考参考,毕竟是其他实现框架,如Struts2和Spring Acegi的实现基础。
SAP 用户权限控制设置及开发.doc
Linux系统下用户权限控制方法.docx
设计pb应用程序中,多用户条件下的权限控制方法。
基于JAVA_XML技术的用户权限控制管理.pdf
这是一个使用C#简单三层的架构、实现获取本地计算机硬件信息的demo、用到...5、用户权限控制 6、NPOI导出数据到Excel 7、数据的条件筛选 ...... 这个demo比较适合新手参考、用到的知识点比较广、希望对新手有一点的帮助
Vue-Access-Control是一套基于Vue/Vue-Router/axios 实现的前端用户权限控制解决方案,通过对路由、视图、请求三个层面的控制,使开发者可以实现任意颗粒度的用户权限控制
Vue-Access-Control是一套基于Vue/Vue-Router/axios 实现的前端用户权限控制解决方案,通过对路由、视图、请求三个层面的控制,使开发者可以实现任意颗粒度的用户权限控制。
只需设定相关属性即可实现实现权限的控制以及权限设置操作,十分方便以后,就不用重复的写这些东西啦!赶快试试吧...
基于jsp+servlet实现的网上购物系统,包含用户权限控制。