From d7ada6e4e6e12f854db397389cb4cfba61da7299 Mon Sep 17 00:00:00 2001 From: thinkgem Date: Thu, 7 Nov 2024 10:15:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=B2=97=E4=BD=8D=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E6=8E=A5=E5=8F=A3=EF=BC=9B=E4=BC=98=E5=8C=96=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=EF=BC=8C=E7=9B=B4=E6=8E=A5=E9=80=9A=E8=BF=87=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2=E6=9F=A5=E8=AF=A2=EF=BC=8C?= =?UTF-8?q?=E5=87=8F=E5=B0=91=E8=81=94=E8=A1=A8=EF=BC=8C=E6=8F=90=E5=8D=87?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=95=88=E7=8E=87=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/sys/web/LoginController.java | 56 ++++++++++++++++--- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java b/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java index 6c34467e..a0170ca7 100644 --- a/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java +++ b/modules/core/src/main/java/com/jeesite/modules/sys/web/LoginController.java @@ -6,6 +6,7 @@ package com.jeesite.modules.sys.web; import com.fasterxml.jackson.annotation.JsonView; import com.jeesite.common.codec.EncodeUtils; +import com.jeesite.common.collect.ListUtils; import com.jeesite.common.config.Global; import com.jeesite.common.lang.StringUtils; import com.jeesite.common.shiro.filter.FormFilter; @@ -15,8 +16,10 @@ import com.jeesite.common.web.BaseController; import com.jeesite.common.web.CookieUtils; import com.jeesite.common.web.http.ServletUtils; import com.jeesite.modules.sys.entity.Menu; +import com.jeesite.modules.sys.entity.PostRole; import com.jeesite.modules.sys.entity.Role; import com.jeesite.modules.sys.entity.User; +import com.jeesite.modules.sys.service.PostService; import com.jeesite.modules.sys.utils.PwdUtils; import com.jeesite.modules.sys.utils.UserUtils; import io.swagger.annotations.Api; @@ -26,6 +29,7 @@ import org.apache.shiro.authz.annotation.RequiresPermissions; import org.apache.shiro.session.Session; import org.apache.shiro.subject.Subject; import org.apache.shiro.web.util.WebUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -48,7 +52,10 @@ import java.util.Map; @RequestMapping(value = "${adminPath}") @ConditionalOnProperty(name="user.enabled", havingValue="true", matchIfMissing=true) public class LoginController extends BaseController{ - + + @Autowired + private PostService postService; + /** * 登录页面 */ @@ -187,11 +194,8 @@ public class LoginController extends BaseController{ return null; } - // 获取当前会话对象,并返回一些数据 + // 如果是登录操作,则初始化一些登录参数 Session session = UserUtils.getSession(); - model.addAllAttributes(FormFilter.getLoginSuccessData(request, response, user, session)); - - // 是否是登录操作 boolean isLogin = Global.TRUE.equals(session.getAttribute(BaseAuthorizingRealm.IS_LOGIN_OPER)); if (isLogin){ // 获取后接着清除,防止下次获取仍然认为是登录状态 @@ -224,6 +228,11 @@ public class LoginController extends BaseController{ } } + // 获取当前会话对象,并返回一些数据 + if (!StringUtils.equals(request.getParameter("__be"), Global.YES)) { + model.addAllAttributes(FormFilter.getLoginSuccessData(request, response, user, session)); + } + // 获取登录成功后跳转的页面 String successUrl = request.getParameter("__url"); if (StringUtils.isBlank(successUrl)){ @@ -361,7 +370,7 @@ public class LoginController extends BaseController{ } /** - * 切换系统菜单(仅超级管理员有权限) + * 切换系统菜单(菜单归属子系统) */ @RequiresPermissions("user") @RequestMapping(value = "switch/{sysCode}") @@ -380,7 +389,7 @@ public class LoginController extends BaseController{ } /** - * 切换角色菜单(仅超级管理员有权限) + * 切换角色菜单(用户->角色) */ @RequiresPermissions("user") @RequestMapping(value = {"switchRole","switchRole/{roleCode}"}) @@ -397,6 +406,39 @@ public class LoginController extends BaseController{ } return REDIRECT + adminPath + "/index"; } + + /** + * 切换岗位菜单(用户->岗位->角色)v4.9.2 + */ + @RequiresPermissions("user") + @RequestMapping(value = {"switchPost","switchPost/{postCode}"}) + public String switchPost(@PathVariable(required=false) String postCode, HttpServletRequest request) { + Session session = UserUtils.getSession(); + if (StringUtils.isNotBlank(postCode)){ + PostRole where = new PostRole(); + where.setPostCode(postCode); + where.sqlMap().loadJoinTableAlias("r"); + List roleCodes = ListUtils.newArrayList(); + postService.findPostRoleList(where).forEach(e -> { + if (e.getRole() != null && PostRole.STATUS_NORMAL.equals(e.getRole().getStatus())) { + roleCodes.add(e.getRoleCode()); + } + }); + if (roleCodes.isEmpty()){ + roleCodes.add("__none__"); + } + session.setAttribute("postCode", postCode); + session.setAttribute("roleCode", StringUtils.joinComma(roleCodes)); // 5.4.0+ 支持多个,逗号隔开 + }else{ + session.removeAttribute("postCode"); + session.removeAttribute("roleCode"); + } + UserUtils.removeCache(UserUtils.CACHE_AUTH_INFO+"_"+session.getId()); + if (ServletUtils.isAjaxRequest(request)) { + return renderResult(Global.TRUE, text("岗位切换成功")); + } + return REDIRECT + adminPath + "/index"; + } /** * 切换主题风格