package com.oa.manager.impl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.oa.manager.AclManager;
import com.oa.model.ACL;
import com.oa.model.Module;
import com.oa.model.Permission;
public class AclManagerImpl extends HibernateDaoSupport implements AclManager {
//授权
public void addOrModifyPermission(String principalType, int principalSn,
int resourceSn, int permission, boolean yes) {
//根据主体标识和资源标识查找ACL实例
ACL acl = this.findAcl(principalType, principalSn, resourceSn);
//如果存在ACL实例,则更新
if(acl != null) {
acl.setPermission(permission, yes);
this.getHibernateTemplate().update(acl);
return;
}
//不存在ACL实例
acl = new ACL();
acl.setPrincipalType(principalType);
acl.setPrincipalSn(principalSn);
acl.setResourceSn(resourceSn);
acl.setPermission(permission, yes);
this.getHibernateTemplate().save(acl);
}
//设置用户的继承特性
//true表示继承,false表示不继承
public void addOrModifyUserExtends(int userId, int resourceSn, boolean yes) {
//根据主体标识和资源标识查找ACL实例
ACL acl = this.findAcl(ACL.TYPE_USER, userId, resourceSn);
//如果存在ACL实例,则更新
if(acl != null) {
acl.setExtends(yes);
this.getHibernateTemplate().update(acl);
return;
}
//不存在ACL实例
acl = new ACL();
acl.setPrincipalType(ACL.TYPE_USER);
acl.setPrincipalSn(userId);
acl.setResourceSn(resourceSn);
acl.setExtends(yes);
this.getHibernateTemplate().save(acl);
}
//删除
public void deletePermission(String principalType, int principalSn,
int resourceSn) {
this.getHibernateTemplate().delete(this.findAcl(principalType, principalSn, resourceSn));
}
//即时认证
@SuppressWarnings("unchecked")
public boolean hasPermission(int userId, int resourceSn, int permission) {
//查找直接授予用户的授权
ACL acl = this.findAcl(ACL.TYPE_USER, userId, resourceSn);
if(acl != null) {
int result = acl.getPermission(permission);
if(result != ACL.ACL_NEUTRAL) {
return result == ACL.ACL_YES ? true : false;
}
}
//继续查找用户的角色授权
String hql = "select r.id from UsersRoles ur join ur.role r join ur.user u " +
"where u.id = ? order by ur.orderNum";
List<Integer> aclIds = this.getHibernateTemplate().find(hql, userId);
//依照角色优先级,查找ACL实例
for(int id : aclIds) {
acl = this.findAcl(ACL.TYPE_USER, id, resourceSn);
if(acl != null) {
return acl.getPermission(permission) == ACL.ACL_YES ? true : false;
}
}
return false;
}
public boolean hasPermissionByResourceSn(int userId, String sn, int permission){
String hql = "select m.id from Module m where m.sn = ?";
return this.hasPermission(
userId,
(Integer)this.getSession().createQuery(hql).setParameter(0, sn).uniqueResult(),
permission);
}
@SuppressWarnings("unchecked")
public List<Module> searchModules(int userId) {
Map<Integer, ACL> temp = new HashMap<Integer, ACL>();
//根据优先级从低到高查找用户拥有的角色
String hql = "select r.id from UsersRoles ur join ur.role r join ur.user u " +
"where u.id = ? order by ur.orderNum desc";
List<Integer> rIds = this.getHibernateTemplate().find(hql, userId);
//依次获得角色的权限列表
for(int rId : rIds) {
List<ACL> acls = this.findRoleACLs(rId);
//把授权放入临时变量
for(ACL acl : acls) {
temp.put(acl.getResourceSn(), acl);
}
}
//查找直接授予用户的授权列表
List<ACL> acls = this.findUserAcls(userId);
for(ACL acl : acls) {
temp.put(acl.getResourceSn(), acl);
}
//已经获得用户所拥有的所有授权
//去掉没有读取权限的授权
//临时变量
List<Integer> delR = new ArrayList<Integer>();
Set<Map.Entry<Integer, ACL>> entries = temp.entrySet();
for(Map.Entry<Integer, ACL> entry : entries) {
ACL acl = entry.getValue();
if(acl.getPermission(Permission.READ) == ACL.ACL_NO) {
delR.add(entry.getKey());
}
}
for(Integer key : delR) {
System.out.println(key);
}
//删除没有读取权限的授权
for(Integer key : delR) {
temp.remove(key);
}
//判断
if(temp.isEmpty()) {
return new ArrayList<Module>();
}
String searchModules = "select m from Module m where m.id in (:ids)";
return this.getSession().createQuery(searchModules)
.setParameterList("ids", temp.keySet())
.list();
}
//根据用户查找直接授予用户的权限列表,返回元素是ACL实例(注意:若权限是继承的,则不应该包含在列表中)
@SuppressWarnings({ "unchecked", "unused" })
private List<ACL> findUserAcls(int userId) {
String hql = "select acl from ACL acl where acl.principalType = ? " +
"and acl.principalSn = ? and acl.extendsState = 0";
return this.getHibernateTemplate().find(hql, new Object[]{ACL.TYPE_USER,userId});
}
//根据角色查找角色的授权列表,返回列表的元素是:ACL
@SuppressWarnings({ "unused", "unchecked" })
private List<ACL> findRoleACLs(int roleId) {
String hql = "select acl from ACL acl where acl.principalType = ? " +
"and acl.principalSn = ?";
return this.getHibernateTemplate().find(hql, new Object[]{ACL.TYPE_ROLE,roleId});
}
//查找符合条件的ACL实例
private ACL findAcl(String principalType, int principalSn,
int resourceSn) {
return (ACL)this.getSession().createQuery(
"select acl from ACL acl where acl.principalType = ? " +
"and acl.principalSn = ? and acl.resourceSn = ?")
.setParameter(0, principalType)
.setParameter(1, principalSn)
.setParameter(2, resourceSn)
.uniqueResult();
}
public List<?> searchAclRecord(String principalType, int principalSn) {
String sql = "select resourceSn,aclState&1,aclState&2," +
"aclState&4,aclState&8,extendsState " +
"from t_acl where principalType = '"+principalType +
"' and principalSn = "+principalSn;
return this.getSession().createSQLQuery(sql).list();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
J2EE-OA管理系统 spring+struts2+hibernate
共211个文件
class:46个
java:46个
xml:29个
4星 · 超过85%的资源 需积分: 9 60 下载量 149 浏览量
2010-07-22
02:17:12
上传
评论
收藏 13.91MB RAR 举报
温馨提示
这是一个J2EE-OA管理系统 spring+struts2+hibernate,采用现比较流行的一些技术(struts+hibernate+spring)
资源推荐
资源详情
资源评论
收起资源包目录
J2EE-OA管理系统 spring+struts2+hibernate (211个子文件)
AclManagerImpl.class 7KB
InitSystemDatasImpl.class 7KB
UserAction.class 5KB
UserManagerImpl.class 4KB
ModuleAction.class 4KB
AbstractPagerManager.class 3KB
PersonAction.class 3KB
OrgTest.class 3KB
OrgAction.class 3KB
AclAction.class 3KB
OrgManagerImpl.class 2KB
ACL.class 2KB
ModuleManagerImpl.class 2KB
Person.class 2KB
PagerFilter.class 2KB
RoleAction.class 2KB
Module.class 2KB
PersonManagerImpl.class 2KB
AddAction.class 2KB
Organization.class 2KB
LoginAction.class 2KB
SystemContext.class 2KB
User.class 2KB
RoleManagerImpl.class 2KB
OrgManagerTest.class 1KB
OutlookAction.class 1KB
HibernateUtils.class 1KB
UsersRoles.class 1KB
PagerModel.class 1005B
InitSystemDatasTest.class 995B
DelAction.class 909B
BaseAction.class 894B
LogTest2.class 822B
LogTest.class 748B
SecurityFunction.class 716B
Role.class 706B
Blog.class 700B
AclManager.class 594B
UserManager.class 520B
MainAction.class 459B
Permission.class 419B
RoleManager.class 340B
PersonManager.class 329B
ModuleManager.class 320B
OrgManager.class 309B
InitSystemDatas.class 181B
.classpath 2KB
oa.css 6KB
login.css 1KB
Thumbs.db 14KB
logo_bg.gif 32KB
logo.gif 7KB
logo_copyright_bg.gif 5KB
logo.gif 2KB
userLogin_button.gif 2KB
userLogin.gif 2KB
addpic.gif 1KB
title_middle.gif 1KB
cz.gif 940B
title_left.gif 544B
peditor.gif 450B
arrowdown.gif 424B
netm.gif 414B
arrowup.gif 407B
mail.gif 369B
news.gif 368B
word.gif 366B
title_right.gif 303B
userLogin_down.gif 177B
dela.gif 121B
file1.gif 89B
logo_under_line.gif 62B
spring.jar 2.81MB
hibernate3.jar 2.64MB
struts2-core-2.0.14.jar 2.22MB
aspectjweaver.jar 1.47MB
dwr.jar 1.08MB
freemarker-2.3.8.jar 784KB
mysql-connector-java-5.1.7-bin.jar 693KB
commons-collections-3.1.jar 546KB
javassist-3.4.GA.jar 460KB
xwork-2.0.7.jar 449KB
antlr-2.7.6.jar 433KB
standard.jar 384KB
log4j-1.2.14.jar 359KB
dom4j-1.6.1.jar 307KB
jaxen-1.1-beta-6.jar 239KB
ognl-2.6.11.jar 164KB
junit.jar 118KB
aspectjrt.jar 112KB
pager-taglib.jar 46KB
commons-logging-1.0.4.jar 37KB
jstl.jar 20KB
slf4j-api-1.5.2.jar 17KB
jta-1.1.jar 13KB
slf4j-log4j12-1.5.2.jar 9KB
struts2-spring-plugin-2.0.14.jar 9KB
AclManagerImpl.java 6KB
InitSystemDatasImpl.java 5KB
UserAction.java 4KB
共 211 条
- 1
- 2
- 3
「已注销」
- 粉丝: 19
- 资源: 125
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页