支持如下数据范围设置:
- 所有数据
- 所在公司及以下数据
- 所在公司数据
- 所在部门及以下数据
- 所在部门数据
- 仅本人数据
- 按明细设置(特殊情况下,跨机构授权)
User user = UserUtils.getUser(); // 使用标准查询 DetachedCriteria dc = articleDao.createDetachedCriteria(); dc.createAlias("office", "office").createAlias("user", "user"); dc.add(dataScopeFilter(user, "office", "user")); List<Entity> list = articleDao.find(page, dc);; // 使用HQL查询 String hql = "select e from Entity e join e.office o join e.user u where 1=1 "; hql += dataScopeFilterString(UserUtils.getUser(), "o", "u"); List<Entity> list2 = articleDao.find(page, hql);
/** * 数据范围过滤 * @param dc Hibernate标准查询对象 * @param user 当前用户对象,通过“UserUtils.getUser()”获取 * @param officeAlias 机构表别名,例如:dc.createAlias("office", "office"); * @param userAlias 用户表别名,传递空,忽略此参数 * @return 标准连接条件对象 */ protected static Junction dataScopeFilter(User user, String officeAlias, String userAlias) { // 进行权限过滤,多个角色权限范围之间为或者关系。 List<String> dataScope = Lists.newArrayList(); Junction junction = Restrictions.disjunction(); // 超级管理员,跳过权限过滤 if (!user.isAdmin()){ for (Role r : user.getRoleList()){ if (!dataScope.contains(r.getDataScope()) && StringUtils.isNotBlank(officeAlias)){ boolean isDataScopeAll = false; if (Role.DATA_SCOPE_ALL.equals(r.getDataScope())){ isDataScopeAll = true; } else if (Role.DATA_SCOPE_COMPANY_AND_CHILD.equals(r.getDataScope())){ junction.add(Restrictions.eq(officeAlias+".id", user.getCompany().getId())); junction.add(Restrictions.like(officeAlias+".parentIds", user.getCompany().getParentIds()+user.getCompany().getId()+",%")); } else if (Role.DATA_SCOPE_COMPANY.equals(r.getDataScope())){ junction.add(Restrictions.eq(officeAlias+".id", user.getCompany().getId())); junction.add(Restrictions.and(Restrictions.eq(officeAlias+".parent.id", user.getCompany().getId()), Restrictions.eq(officeAlias+".type", "2"))); // 包括本公司下的部门 } else if (Role.DATA_SCOPE_OFFICE_AND_CHILD.equals(r.getDataScope())){ junction.add(Restrictions.eq(officeAlias+".id", user.getOffice().getId())); junction.add(Restrictions.like(officeAlias+".parentIds", user.getOffice().getParentIds()+user.getOffice().getId()+",%")); } else if (Role.DATA_SCOPE_OFFICE.equals(r.getDataScope())){ junction.add(Restrictions.eq(officeAlias+".id", user.getOffice().getId())); } else if (Role.DATA_SCOPE_CUSTOM.equals(r.getDataScope())){ junction.add(Restrictions.in(officeAlias+".id", r.getOfficeIdList())); } //else if (Role.DATA_SCOPE_SELF.equals(r.getDataScope())){ if (!isDataScopeAll){ if (StringUtils.isNotBlank(userAlias)){ junction.add(Restrictions.eq(userAlias+".id", user.getId())); }else { junction.add(Restrictions.isNull(officeAlias+".id")); } }else{ // 如果包含全部权限,则去掉之前添加的所有条件,并跳出循环。 junction = Restrictions.disjunction(); break; } dataScope.add(r.getDataScope()); } } } return junction; } /** * 数据范围过滤 * @param user 当前用户对象,通过“UserUtils.getUser()”获取 * @param officeAlias 机构表别名,例如:dc.createAlias("office", "office"); * @param userAlias 用户表别名,传递空,忽略此参数 * @return ql查询字符串 */ protected static String dataScopeFilterString(User user, String officeAlias, String userAlias) { Junction junction = dataScopeFilter(user, officeAlias, userAlias); Iterator<Criterion> it = junction.conditions().iterator(); StringBuilder ql = new StringBuilder(); ql.append(" and ("); if (it.hasNext()){ ql.append(it.next()); } String[] strField = {".parentIds like ", ".type="}; // 需要给字段增加“单引号”的字段。 while (it.hasNext()) { ql.append(" or ("); String s = it.next().toString(); for(String field : strField){ s = s.replaceAll(field + "(\\w.*)", field + "'$1'"); } ql.append(s).append(")"); } ql.append(")"); return ql.toString(); }
相关推荐
Jeesite-Mysql-V5.0.1 是一个基于Java语言开发的企业级Web应用框架,结合了MySQL数据库的强大功能,旨在提供高效、稳定且易于扩展的解决方案。在本篇中,我们将深入探讨Jeesite与MySQL V5.0.1版本的集成,以及相关的...
3. **数据权限**:提供精细的数据权限控制,可以根据角色、组织机构、用户等多种维度进行权限分配,确保数据安全。 4. **工作流引擎**:集成Activiti工作流引擎,实现业务流程的自动化管理,包括流程定义、审批、...
【jeesite项目】是一个基于Java技术的企业级应用框架,由国内开发者开发并维护,旨在为快速构建稳定、安全、高效的企业级Web应用提供一套成熟的解决方案。该项目源码的开源特性使得开发者能够深入理解其内部机制,...
- **强大的权限控制**:提供基于角色的权限控制,支持细粒度的菜单、按钮权限分配,以及数据权限的控制。 - **丰富的插件支持**:内置多种常用插件,如富文本编辑器、图片上传、文件管理等,满足日常开发需求。 - **...
内容管理系统是企业信息化的重要组成部分,Jeesite 提供了一套完整的内容管理解决方案。文档将详细介绍内容的创建、编辑、发布和管理等功能,以及相关的权限控制。 **9. API 接口文档 (jeesite_help.chm)** 作为...
Jeesite作为一个企业级应用框架,其设计目标是简化开发流程,提供一套完整的后台管理解决方案。它包含了权限管理、工作流引擎、报表统计等多个模块,能够满足大多数企业的基本需求。Jeesite的特点在于其高度模块化的...
Jeesite是一款基于Java技术开发的开源企业级应用框架,它旨在简化企业级Web应用的开发流程,提供一套完整的解决方案。该框架结合了MVC模式、ORM映射、权限控制、工作流等核心功能,为开发者带来高效、稳定且易于维护...
此外,Jeesite项目还包含了权限控制、工作流、报表等多个功能模块,这些模块的集成,为开发者提供了完整的业务应用解决方案。其中,权限控制模块如Shiro或Spring Security,可以帮助开发者轻松实现用户登录验证、...
此外,Jeesite还提供了强大的权限控制、数据字典管理、日志记录等功能,便于开发者进行二次开发。通过模块化设计,开发者可以方便地添加新的功能模块或替换现有模块,以满足不同企业的业务需求。 总结来说,Jeesite...
**混合开发框架——JeeSite** JeeSite是一款基于Java技术构建的企业级应用开发框架,旨在简化企业级应用的快速...无论是小型项目还是复杂的系统,JeeSite都能提供完善的解决方案,助力开发团队快速构建高质量的应用。
它提供了一套完整的解决方案,涵盖了从用户登录、权限管理到业务流程处理等多个方面,降低了开发复杂性和维护成本。 **升级与迁移** 虽然`jeesite3.7` 已经有新版本,但迁移或升级并不总是必要的。如果现有系统...
JeeSite是一款高效、灵活的企业级快速开发平台,其v5.6.1版本为用户提供了一个强大的建站解决方案。该平台的核心目标是降低系统开发的复杂度,提升开发效率,同时也为企业信息化建设提供了一个可靠的基石。 JeeSite...
`jeesite` 是一个基于 Java 的开源企业级开发框架,它旨在简化企业级应用的开发流程,提供了一套完整的解决方案,包括基础功能、权限控制、工作流等模块。这个框架已经在实际项目中经过验证,证明其稳定性和实用性,...
它的核心模块包括权限管理、内容管理、工作流、报表统计等多个方面,为开发者提供了一站式的解决方案。通过源码学习,我们可以了解到它如何巧妙地应用设计模式,如工厂模式、单例模式、代理模式等,以及如何实现AOP...
Jeesite是一款基于Java开发的企业级开源框架,它提供了全面的Web应用解决方案,集成了许多企业级功能,如权限管理、工作流、报表等,旨在简化开发过程,提升开发效率。本文将深入解析Jeesite源码,探讨其设计理念和...
同时,可以参考Jeesite的官方文档、社区论坛或者相关博客(如博文链接:https://ctrlc.iteye.com/blog/2173521)获取解决方案。通过这样的方式,一般可以解决“jeesite上传到服务器无法访问”的问题。
同时,Jeesite框架则提供了一套完整的开发解决方案,包括权限控制、数据字典、工作流等,使得开发者可以快速搭建企业级应用,降低开发难度和时间成本。 在使用【maven_resp.rar】时,首先需要解压文件,然后将`pom....
"thinkgem-jeesite4-master" 是一个基于JavaEE技术体系的全栈式开发框架,其核心目标是为企业提供一个屏蔽技术壁垒、高效实现业务需求的解决方案。这个框架,即AOSuite,以其强大的功能和易用性,受到了广大开发者的...
Jeesite是一款基于SpringBoot构建的高效、易用的快速开发框架,旨在为Java开发者提供便捷的后台系统开发解决方案。这款框架结合了SpringBoot的强大功能和自身的一系列优秀特性,极大地提高了开发效率,降低了项目...