Merge branch '7.0.2-develop' of https://gitee.com/18idc/roses into 7.0.2-develop-encryption

pull/5/head
q18idc 2021-03-23 23:47:35 +08:00
commit 961ace3f2c
28 changed files with 147 additions and 1437 deletions

View File

@ -32,7 +32,7 @@ import java.util.List;
* @author fengshuonan
* @date 2020/10/15 14:31
*/
public interface AbstractTreeNode {
public interface AbstractTreeNode<T> {
/**
* id
@ -59,6 +59,6 @@ public interface AbstractTreeNode {
* @author fengshuonan
* @date 2020/10/15 15:28
*/
void setChildrenNodes(List childrenNodes);
void setChildrenNodes(List<T> childrenNodes);
}

View File

@ -39,7 +39,7 @@ import java.util.List;
* @date 2020/10/15 14:39
*/
@Data
public class DefaultTreeNode implements AbstractTreeNode {
public class DefaultTreeNode implements AbstractTreeNode<DefaultTreeNode> {
/**
* id
@ -87,7 +87,7 @@ public class DefaultTreeNode implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<DefaultTreeNode> childrenNodes) {
this.children = childrenNodes;
}

View File

@ -41,7 +41,7 @@ import java.util.List;
*/
@ToString
@EqualsAndHashCode
public class ZTreeNode implements AbstractTreeNode {
public class ZTreeNode implements AbstractTreeNode<ZTreeNode> {
/**
* id
@ -88,7 +88,7 @@ public class ZTreeNode implements AbstractTreeNode {
*/
@Getter
@Setter
private List children;
private List<ZTreeNode> children;
/**
* ztree
@ -118,7 +118,7 @@ public class ZTreeNode implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<ZTreeNode> childrenNodes) {
this.children = childrenNodes;
}

View File

@ -45,10 +45,11 @@ public interface SessionManagerApi {
*
* @param token token
* @param loginUser
* @param loginUser
* @author fengshuonan
* @date 2020/10/19 16:47
*/
void createSession(String token, LoginUser loginUser);
void createSession(String token, LoginUser loginUser, Boolean createCookie);
/**
* loginUser

View File

@ -134,24 +134,6 @@ public class AuthConfigExpander {
return ConfigContext.me().getSysConfigValueWithDefault("SYS_AUTH_PARAM_NAME", String.class, DEFAULT_AUTH_PARAM_NAME);
}
/**
* cookie
* <p>
*
* <p>
* 1.HttpServletResponseaddCookie()
* <p>
* 2.tokencookietoken
* <p>
*
*
* @author fengshuonan
* @date 2020/12/27 13:15
*/
public static Boolean getSessionAddToCookie() {
return ConfigContext.me().getSysConfigValueWithDefault("SYS_SESSION_ADD_TO_COOKIE", Boolean.class, Boolean.FALSE);
}
/**
* cookiecookename
*

View File

@ -67,4 +67,9 @@ public class LoginRequest extends BaseRequest {
*/
private String verCode;
/**
* cookie
*/
private Boolean createCookie = false;
}

View File

@ -155,24 +155,6 @@ public class AuthServiceImpl implements AuthServiceApi {
// 2. 校验用户token是否正确校验失败会抛出异常
this.validateToken(token);
// 3. 如果token校验通过获取token的payload以及是否开启了记住我功能
DefaultJwtPayload defaultPayload = JwtContext.me().getDefaultPayload(token);
Boolean rememberMe = defaultPayload.getRememberMe();
// 4. 获取用户的当前会话信息
LoginUser loginUser = sessionManagerApi.getSession(token);
// 5. 如果开了记住我,但是会话为空,则创建一次会话信息
if (rememberMe && loginUser == null) {
UserLoginInfoDTO userLoginInfo = userServiceApi.getUserLoginInfo(defaultPayload.getAccount());
sessionManagerApi.createSession(token, userLoginInfo.getLoginUser());
}
// 6. 如果会话信息为空,则判定此次校验失败
if (loginUser == null) {
throw new AuthException(AUTH_EXPIRED_ERROR);
}
}
/**
@ -234,6 +216,7 @@ public class AuthServiceImpl implements AuthServiceApi {
// 8. 生成用户的token
DefaultJwtPayload defaultJwtPayload = new DefaultJwtPayload(loginUser.getUserId(), loginUser.getAccount(), loginRequest.getRememberMe());
String jwtToken = JwtContext.me().generateTokenDefaultPayload(defaultJwtPayload);
loginUser.setToken(jwtToken);
synchronized (SESSION_OPERATE_LOCK) {
@ -241,7 +224,7 @@ public class AuthServiceImpl implements AuthServiceApi {
loginUser.setWsUrl(WebSocketConfigExpander.getWebSocketWsUrl());
// 9. 缓存用户信息,创建会话
sessionManagerApi.createSession(jwtToken, loginUser);
sessionManagerApi.createSession(jwtToken, loginUser, loginRequest.getCreateCookie());
// 10. 如果开启了单账号单端在线,则踢掉已经上线的该用户
if (AuthConfigExpander.getSingleAccountLoginFlag()) {

View File

@ -72,17 +72,15 @@ public class LoginUserImpl implements LoginUserApi {
}
// 3. 从cookie中获取token
if (AuthConfigExpander.getSessionAddToCookie()) {
String sessionCookieName = AuthConfigExpander.getSessionCookieName();
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
String sessionCookieName = AuthConfigExpander.getSessionCookieName();
Cookie[] cookies = request.getCookies();
if (cookies != null && cookies.length > 0) {
for (Cookie cookie : cookies) {
// 如果cookie有对应的值并且不为空
if (sessionCookieName.equals(cookie.getName())
&& StrUtil.isNotBlank(cookie.getValue())) {
return cookie.getValue();
}
// 如果cookie有对应的值并且不为空
if (sessionCookieName.equals(cookie.getName())
&& StrUtil.isNotBlank(cookie.getValue())) {
return cookie.getValue();
}
}
}

View File

@ -83,7 +83,7 @@ public class DefaultSessionManager implements SessionManagerApi {
}
@Override
public void createSession(String token, LoginUser loginUser) {
public void createSession(String token, LoginUser loginUser, Boolean createCookie) {
// 装配用户信息的缓存
loginUserCache.put(token, loginUser, sessionExpiredSeconds);
@ -97,7 +97,7 @@ public class DefaultSessionManager implements SessionManagerApi {
allPlaceLoginTokenCache.put(loginUser.getUserId().toString(), theUserTokens);
// 如果开启了cookie存储会话信息则需要给HttpServletResponse添加一个cookie
if (AuthConfigExpander.getSessionAddToCookie()) {
if (createCookie) {
String sessionCookieName = AuthConfigExpander.getSessionCookieName();
Cookie cookie = sessionCookieCreator.createCookie(sessionCookieName, token, Convert.toInt(AuthConfigExpander.getAuthJwtTimeoutSeconds()));
HttpServletResponse response = HttpServletUtil.getResponse();
@ -193,12 +193,10 @@ public class DefaultSessionManager implements SessionManagerApi {
@Override
public void destroySessionCookie() {
// 如果开启了cookie存储会话信息则需要给HttpServletResponse添加一个cookie
if (AuthConfigExpander.getSessionAddToCookie()) {
String sessionCookieName = AuthConfigExpander.getSessionCookieName();
Cookie cookie = sessionCookieCreator.createCookie(sessionCookieName, null, 0);
HttpServletResponse response = HttpServletUtil.getResponse();
response.addCookie(cookie);
}
String sessionCookieName = AuthConfigExpander.getSessionCookieName();
Cookie cookie = sessionCookieCreator.createCookie(sessionCookieName, null, 0);
HttpServletResponse response = HttpServletUtil.getResponse();
response.addCookie(cookie);
}
@Override

View File

@ -38,7 +38,7 @@ import java.util.List;
* @date 2020/10/30 11:05
*/
@Data
public class TreeDictInfo implements AbstractTreeNode {
public class TreeDictInfo implements AbstractTreeNode<TreeDictInfo> {
/**
* id
@ -84,7 +84,7 @@ public class TreeDictInfo implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List linkedList) {
public void setChildrenNodes(List<TreeDictInfo> linkedList) {
this.children = linkedList;
}

File diff suppressed because one or more lines are too long

View File

@ -1,15 +0,0 @@
-- 分离版本唯一区别是这个配置的值是false
UPDATE `sys_config`
SET `config_name` = '会话信息是否增加保存在cookie中',
`config_code` = 'SYS_SESSION_ADD_TO_COOKIE',
`config_value` = 'false',
`sys_flag` = 'Y',
`remark` = NULL,
`status_flag` = 1,
`group_code` = 'auth_config',
`del_flag` = 'N',
`create_time` = NULL,
`create_user` = NULL,
`update_time` = NULL,
`update_user` = NULL
WHERE `config_id` = 13;

View File

@ -37,7 +37,7 @@ import java.util.List;
* @date 2020/4/5 12:03
*/
@Data
public class AntdMenuSelectTreeNode implements AbstractTreeNode {
public class AntdMenuSelectTreeNode implements AbstractTreeNode<AntdMenuSelectTreeNode> {
/**
*
@ -67,7 +67,7 @@ public class AntdMenuSelectTreeNode implements AbstractTreeNode {
/**
*
*/
private List children;
private List<AntdMenuSelectTreeNode> children;
@Override
public String getNodeId() {
@ -80,7 +80,7 @@ public class AntdMenuSelectTreeNode implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<AntdMenuSelectTreeNode> childrenNodes) {
this.children = childrenNodes;
}
}

View File

@ -24,58 +24,52 @@
*/
package cn.stylefeng.roses.kernel.system.api.pojo.menu.antd;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
import lombok.Data;
import java.util.List;
/**
* antd vueservice
* antd vuedto
*
* @author majianguo
* @date 2021/1/7 15:18
* @author fengshuonan
* @date 2021/3/23 21:26
*/
@Data
public class AntdSysMenuDTO {
/**
*
*/
private Long menuId;
/**
* idid-1
*/
private Long menuParentId;
/**
*
*/
private String menuName;
private String title;
/**
* URL/menuantd vue
*
*/
private String antdvRouter;
private String icon;
/**
* antd vue
* (/)
*/
private String antdvIcon;
private String path;
/**
* Y-N-
* (view)
*/
private String visible;
private String component;
/**
*
* true()
*/
private List children;
private Boolean hide;
/**
* 访
*
*/
private List<SimpleRoleInfo> roles;
private String uid;
/**
*
*/
private List<AntdSysMenuDTO> children;
}

View File

@ -36,7 +36,7 @@ import java.util.List;
* @date 2021/1/7 18:09
*/
@Data
public class AntdvMenuItem implements AbstractTreeNode {
public class AntdvMenuItem implements AbstractTreeNode<AntdvMenuItem> {
/**
*
@ -89,7 +89,7 @@ public class AntdvMenuItem implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<AntdvMenuItem> childrenNodes) {
this.children = childrenNodes;
}

View File

@ -36,7 +36,7 @@ import java.util.List;
* @date 2020/12/27 18:36
*/
@Data
public class LayuiIndexMenuTreeNode implements AbstractTreeNode {
public class LayuiIndexMenuTreeNode implements AbstractTreeNode<LayuiIndexMenuTreeNode> {
/**
*
@ -84,7 +84,7 @@ public class LayuiIndexMenuTreeNode implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<LayuiIndexMenuTreeNode> childrenNodes) {
this.children = childrenNodes;
}

View File

@ -36,7 +36,7 @@ import java.util.List;
* @date 2021/1/9 16:59
*/
@Data
public class LayuiMenuAndButtonTreeResponse implements AbstractTreeNode {
public class LayuiMenuAndButtonTreeResponse implements AbstractTreeNode<LayuiMenuAndButtonTreeResponse> {
/**
* ID
@ -71,7 +71,7 @@ public class LayuiMenuAndButtonTreeResponse implements AbstractTreeNode {
/**
*
*/
private List children;
private List<LayuiMenuAndButtonTreeResponse> children;
@Override
public String getNodeId() {
@ -84,7 +84,7 @@ public class LayuiMenuAndButtonTreeResponse implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<LayuiMenuAndButtonTreeResponse> childrenNodes) {
this.children = childrenNodes;
}
}

View File

@ -37,7 +37,7 @@ import java.util.List;
* @date 2020/12/27 18:36
*/
@Data
public class OrganizationTreeNode implements AbstractTreeNode, AbstractXmSelectNode {
public class OrganizationTreeNode implements AbstractTreeNode<OrganizationTreeNode>, AbstractXmSelectNode {
/**
* idid0
@ -80,7 +80,7 @@ public class OrganizationTreeNode implements AbstractTreeNode, AbstractXmSelectN
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<OrganizationTreeNode> childrenNodes) {
this.children = childrenNodes;
}

View File

@ -36,7 +36,7 @@ import java.util.List;
* @date 2021/1/14 21:51
*/
@Data
public class LayuiApiResourceTreeNode implements AbstractTreeNode {
public class LayuiApiResourceTreeNode implements AbstractTreeNode<LayuiApiResourceTreeNode> {
/**
*
@ -82,7 +82,7 @@ public class LayuiApiResourceTreeNode implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<LayuiApiResourceTreeNode> childrenNodes) {
this.children = childrenNodes;
}

View File

@ -32,10 +32,8 @@ import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource;
import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuRequest;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuItem;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.layui.LayuiMenuAndButtonTreeResponse;
import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest;
import cn.stylefeng.roses.kernel.system.modular.menu.factory.AntdMenusFactory;
import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
@ -146,8 +144,7 @@ public class SysMenuController {
@GetResource(name = "获取系统所有菜单适用于登录后获取左侧菜单适配antd vue版本", path = "/sysMenu/getLeftMenusAntdv", requiredPermission = false)
public ResponseData getLeftMenusAntdv() {
List<AntdSysMenuDTO> sysMenuResponses = sysMenuService.getLeftMenusAntdv();
List<AntdvMenuItem> totalMenus = AntdMenusFactory.createTotalMenus(sysMenuResponses);
return new SuccessResponseData(totalMenus);
return new SuccessResponseData(sysMenuResponses);
}
/**

View File

@ -45,7 +45,7 @@ import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_menu")
public class SysMenu extends BaseEntity implements AbstractTreeNode {
public class SysMenu extends BaseEntity implements AbstractTreeNode<SysMenu> {
/**
*
@ -149,6 +149,12 @@ public class SysMenu extends BaseEntity implements AbstractTreeNode {
@TableField("antdv_link_url")
private String antdvLinkUrl;
/**
* url
*/
@TableField("antdv_uid_url")
private String antdvUidUrl;
/**
* Y-N-
*/
@ -159,7 +165,7 @@ public class SysMenu extends BaseEntity implements AbstractTreeNode {
*
*/
@TableField(exist = false)
private List children;
private List<SysMenu> children;
/**
*
@ -184,7 +190,7 @@ public class SysMenu extends BaseEntity implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<SysMenu> childrenNodes) {
this.children = childrenNodes;
}

View File

@ -24,15 +24,13 @@
*/
package cn.stylefeng.roses.kernel.system.modular.menu.factory;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum;
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdMenuSelectTreeNode;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuAuthorityItem;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdvMenuItem;
import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu;
import java.util.ArrayList;
import java.util.List;
@ -51,66 +49,13 @@ public class AntdMenusFactory {
* @author fengshuonan
* @date 2021/1/7 18:17
*/
public static List<AntdvMenuItem> createTotalMenus(List<AntdSysMenuDTO> sysMenuRespons) {
ArrayList<AntdvMenuItem> antdvMenuItems = new ArrayList<>(sysMenuRespons.size());
// 实体转化
for (AntdSysMenuDTO antdSysMenuDTO : sysMenuRespons) {
AntdvMenuItem antdvMenuItem = new AntdvMenuItem();
// 填充id pid name用于构建树
antdvMenuItem.setMenuId(antdSysMenuDTO.getMenuId());
antdvMenuItem.setMenuParentId(antdSysMenuDTO.getMenuParentId());
antdvMenuItem.setName(antdSysMenuDTO.getMenuName());
// 填充路由等信息
antdvMenuItem.setRouter(antdSysMenuDTO.getAntdvRouter());
antdvMenuItem.setIcon(antdSysMenuDTO.getAntdvIcon());
// 填充是否隐藏
antdvMenuItem.setInvisible(YesOrNotEnum.N.getCode().equals(antdSysMenuDTO.getVisible()));
// 填充哪个角色绑定了这个菜单
List<SimpleRoleInfo> roles = antdSysMenuDTO.getRoles();
AntdvMenuAuthorityItem antdvAuthorityItem = new AntdvMenuAuthorityItem();
if (roles != null && roles.size() > 0) {
ArrayList<String> auths = new ArrayList<>();
for (SimpleRoleInfo role : roles) {
auths.add(role.getRoleCode());
}
antdvAuthorityItem.setPermission(auths);
antdvAuthorityItem.setRole(auths);
antdvMenuItem.setAuthority(antdvAuthorityItem);
}
antdvMenuItems.add(antdvMenuItem);
}
// 加入根节点
antdvMenuItems.add(createAntdVMenuRoot());
public static List<AntdSysMenuDTO> createTotalMenus(List<SysMenu> sysMenuList) {
// 构造菜单树
return new DefaultTreeBuildFactory<AntdvMenuItem>(TreeConstants.VIRTUAL_ROOT_PARENT_ID.toString()).doTreeBuild(antdvMenuItems);
}
List<SysMenu> treeStructMenu = new DefaultTreeBuildFactory<SysMenu>(TreeConstants.DEFAULT_PARENT_ID.toString()).doTreeBuild(sysMenuList);
/**
*
*
* @author fengshuonan
* @date 2020/12/30 20:38
*/
private static AntdvMenuItem createAntdVMenuRoot() {
AntdvMenuItem antdvMenuItem = new AntdvMenuItem();
antdvMenuItem.setRouter("root");
antdvMenuItem.setName("根节点");
antdvMenuItem.setMenuId(TreeConstants.DEFAULT_PARENT_ID);
antdvMenuItem.setMenuParentId(TreeConstants.VIRTUAL_ROOT_PARENT_ID);
antdvMenuItem.setInvisible(false);
antdvMenuItem.setAuthority(null);
return antdvMenuItem;
// 模型转化
return doModelTransfer(treeStructMenu);
}
/**
@ -129,4 +74,34 @@ public class AntdMenusFactory {
return menuTreeNode;
}
/**
*
*
* @author fengshuonan
* @date 2021/3/23 21:40
*/
private static List<AntdSysMenuDTO> doModelTransfer(List<SysMenu> sysMenuList) {
if (ObjectUtil.isEmpty(sysMenuList)) {
return null;
} else {
ArrayList<AntdSysMenuDTO> resultMenus = new ArrayList<>();
for (SysMenu sysMenu : sysMenuList) {
AntdSysMenuDTO antdvMenuItem = new AntdSysMenuDTO();
antdvMenuItem.setTitle(sysMenu.getMenuName());
antdvMenuItem.setIcon(sysMenu.getAntdvIcon());
antdvMenuItem.setPath(sysMenu.getAntdvRouter());
antdvMenuItem.setComponent(sysMenu.getAntdvComponent());
antdvMenuItem.setHide(YesOrNotEnum.N.getCode().equals(sysMenu.getVisible()));
antdvMenuItem.setUid(sysMenu.getAntdvUidUrl());
if (ObjectUtil.isNotEmpty(sysMenu.getChildren())) {
antdvMenuItem.setChildren(doModelTransfer(sysMenu.getChildren()));
}
resultMenus.add(antdvMenuItem);
}
return resultMenus;
}
}
}

View File

@ -24,12 +24,8 @@
*/
package cn.stylefeng.roses.kernel.system.modular.menu.mapper;
import cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO;
import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* mapper
@ -39,15 +35,4 @@ import java.util.List;
*/
public interface SysMenuMapper extends BaseMapper<SysMenu> {
/**
* antd vue
* <p>
* 访
*
* @return
* @author majianguo
* @date 2021/1/7 15:27
*/
List<AntdSysMenuDTO> getSystemAllMenus(@Param("menuIdList") List<Long> menuIdList);
}

View File

@ -2,41 +2,5 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.stylefeng.roses.kernel.system.modular.menu.mapper.SysMenuMapper">
<resultMap id="systemMenuAndRole" type="cn.stylefeng.roses.kernel.system.api.pojo.menu.antd.AntdSysMenuDTO">
<id column="menu_id" property="menuId"/>
<result column="menu_parent_id" property="menuParentId"/>
<result column="menu_name" property="menuName"/>
<result column="antdv_router" property="antdvRouter"/>
<result column="antdv_icon" property="antdvIcon"/>
<result column="visible" property="visible"/>
<collection property="roles" ofType="cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo">
<id column="role_id" property="roleId"/>
<result column="role_name" property="roleName"/>
<result column="role_code" property="roleCode"/>
</collection>
</resultMap>
<select id="getSystemAllMenus" resultMap="systemMenuAndRole">
SELECT sm.menu_id,
sm.menu_parent_id,
sm.menu_name,
sm.antdv_router,
sm.antdv_icon,
sm.visible,
sr.role_id,
sr.role_name,
sr.role_code
FROM sys_menu sm
LEFT JOIN sys_role_menu srm ON sm.menu_id = srm.menu_id
LEFT JOIN sys_role sr ON srm.role_id = sr.role_id
WHERE sm.del_flag = 'N'
AND sm.status_flag = 1
<if test="menuIdList != null and menuIdList.size() > 0">
and sm.menu_id in
<foreach collection="menuIdList" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</if>
</select>
</mapper>

View File

@ -275,14 +275,28 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
@Override
public List<AntdSysMenuDTO> getLeftMenusAntdv() {
LambdaQueryWrapper<SysMenu> wrapper = this.createWrapper(new SysMenuRequest());
wrapper.select(SysMenu::getMenuName,
SysMenu::getAntdvIcon,
SysMenu::getAntdvRouter,
SysMenu::getAntdvComponent,
SysMenu::getVisible,
SysMenu::getAntdvUidUrl,
SysMenu::getMenuId,
SysMenu::getMenuParentId);
wrapper.eq(SysMenu::getStatusFlag, StatusEnum.ENABLE.getCode());
// 如果是超级管理员,则获取所有的菜单
if (LoginContext.me().getSuperAdminFlag()) {
return this.baseMapper.getSystemAllMenus(null);
List<SysMenu> totalList = this.list(wrapper);
return AntdMenusFactory.createTotalMenus(totalList);
}
// 获取当前用户的所有菜单
List<Long> menuIdList = getCurrentUserMenuIds();
return this.baseMapper.getSystemAllMenus(menuIdList);
wrapper.in(SysMenu::getMenuId, menuIdList);
List<SysMenu> customList = this.list(wrapper);
return AntdMenusFactory.createTotalMenus(customList);
}
@Override

View File

@ -36,7 +36,7 @@ import java.util.List;
* @date 2020/3/26 14:29
*/
@Data
public class ResourceTreeNode implements AbstractTreeNode {
public class ResourceTreeNode implements AbstractTreeNode<ResourceTreeNode> {
/**
* id
@ -69,7 +69,7 @@ public class ResourceTreeNode implements AbstractTreeNode {
/**
*
*/
private List children;
private List<ResourceTreeNode> children;
@Override
public String getNodeId() {
@ -82,7 +82,7 @@ public class ResourceTreeNode implements AbstractTreeNode {
}
@Override
public void setChildrenNodes(List childrenNodes) {
public void setChildrenNodes(List<ResourceTreeNode> childrenNodes) {
this.children = childrenNodes;
}
}

View File

@ -39,6 +39,7 @@ import cn.stylefeng.roses.kernel.wrapper.api.annotation.Wrapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@ -64,7 +65,21 @@ public class LoginController {
* @date 2021/3/17 17:23
*/
@PostResource(name = "登陆", path = "/login", requiredLogin = false, requiredPermission = false)
public ResponseData doAuth(@RequestBody @Validated LoginRequest loginRequest) {
public ResponseData login(@RequestBody @Validated LoginRequest loginRequest) {
loginRequest.setCreateCookie(true);
LoginResponse loginResponse = authServiceApi.login(loginRequest);
return new SuccessResponseData(loginResponse.getToken());
}
/**
* (cookie)
*
* @author fengshuonan
* @date 2021/3/17 17:23
*/
@PostResource(name = "登陆(分离版)", path = "/loginApi", requiredLogin = false, requiredPermission = false)
public ResponseData loginApi(@RequestBody @Validated LoginRequest loginRequest) {
loginRequest.setCreateCookie(false);
LoginResponse loginResponse = authServiceApi.login(loginRequest);
return new SuccessResponseData(loginResponse.getToken());
}
@ -75,7 +90,7 @@ public class LoginController {
* @author fengshuonan
* @date 2021/3/17 17:24
*/
@GetResource(name = "登出", path = "/logout", requiredPermission = false)
@ApiResource(name = "登出", path = "/logout", requiredPermission = false, method = {RequestMethod.GET, RequestMethod.POST})
public ResponseData logoutPage() {
authServiceApi.logout();
return new SuccessResponseData();

View File

@ -26,7 +26,6 @@ package cn.stylefeng.roses.kernel.system.modular.user.factory;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.extra.spring.SpringUtil;
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleRoleInfo;
import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo;
@ -127,9 +126,6 @@ public class UserLoginInfoFactory {
// 设置用户的登录时间
loginUser.setLoginTime(new Date());
// 设置登录用户token
loginUser.setToken(LoginContext.me().getToken());
// 响应dto
userLoginInfoDTO.setLoginUser(loginUser);
return userLoginInfoDTO;