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();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Struts2+Spring+Hibernate3_工厂办公系统完整源码
共210个文件
java:46个
class:46个
xml:29个
5星 · 超过95%的资源 需积分: 10 46 下载量 43 浏览量
2011-10-28
00:05:48
上传
评论 3
收藏 13.91MB RAR 举报
温馨提示
Struts2+Spring+Hibernate3_工厂办公系统完整源码
资源推荐
资源详情
资源评论
收起资源包目录
Struts2+Spring+Hibernate3_工厂办公系统完整源码 (210个子文件)
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
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
UserManagerImpl.java 3KB
共 210 条
- 1
- 2
- 3
资源评论
- lewic12012-03-26可运行,代码量不大。
- wall_j2015-03-22完整可用,具体还没研究,先给好评
- hsqqg2017-03-06比较简单 框架应用可以看看,谢谢
- guangfei19872012-04-17比较简单 框架应用可以看看
yongweb
- 粉丝: 33
- 资源: 163
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 基于Matlab人脸肤色定理的教师人数统计+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab霍夫曼变换的表盘读数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab火灾烟雾检测源码带GUI界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的恶劣天气交通标志识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的霍夫曼变换的表盘示数识别+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab的车道线识别系统 +源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB的教室人数统计系统带Gui界面+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于MATLAB 的霍夫曼变换答题卡识别源码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
- 基于Matlab+bp神经网络的神经网络汉字识别系统+源代码+全部数据+文档说明+详细注释+使用说明+截图(高分课程设计)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功