list = sysMenuService.findMenuByRoleId(roleId);
return Result.ok(list);
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/controller/SysUserController.java b/service-oa/src/main/java/com/atguigu/auth/controller/SysUserController.java
index 95bbede..614829d 100644
--- a/service-oa/src/main/java/com/atguigu/auth/controller/SysUserController.java
+++ b/service-oa/src/main/java/com/atguigu/auth/controller/SysUserController.java
@@ -3,6 +3,7 @@ package com.atguigu.auth.controller;
import com.atguigu.auth.service.SysUserService;
import com.atguigu.common.result.Result;
+import com.atguigu.common.utils.MD5;
import com.atguigu.model.system.SysUser;
import com.atguigu.vo.system.SysUserQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -107,6 +108,8 @@ public class SysUserController {
@ApiOperation(value = "保存用户")
@PostMapping("save")
public Result save(@RequestBody SysUser user) {
+ //对密码进行MD5加密,只能加密不能解密
+ user.setPassword(MD5.encrypt(user.getPassword()));
sysUserService.save(user);
return Result.ok();
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/mapper/SysMenuMapper.java b/service-oa/src/main/java/com/atguigu/auth/mapper/SysMenuMapper.java
index be7eb56..918a7b9 100644
--- a/service-oa/src/main/java/com/atguigu/auth/mapper/SysMenuMapper.java
+++ b/service-oa/src/main/java/com/atguigu/auth/mapper/SysMenuMapper.java
@@ -2,6 +2,9 @@ package com.atguigu.auth.mapper;
import com.atguigu.model.system.SysMenu;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
/**
*
@@ -13,4 +16,11 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface SysMenuMapper extends BaseMapper {
+ /**
+ * 多表关联查询:用户角色关系表、角色菜单关系表、菜单表
+ *
+ * @param userId
+ * @return
+ */
+ List findUserMenuListByUserId(@Param("userId") Long userId);
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysMenuMapper.xml b/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysMenuMapper.xml
index 31098d7..3930c09 100644
--- a/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysMenuMapper.xml
+++ b/service-oa/src/main/java/com/atguigu/auth/mapper/xml/SysMenuMapper.xml
@@ -1,5 +1,31 @@
+
+
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/SysMenuService.java b/service-oa/src/main/java/com/atguigu/auth/service/SysMenuService.java
index 0f9e87c..67b5279 100644
--- a/service-oa/src/main/java/com/atguigu/auth/service/SysMenuService.java
+++ b/service-oa/src/main/java/com/atguigu/auth/service/SysMenuService.java
@@ -2,6 +2,7 @@ package com.atguigu.auth.service;
import com.atguigu.model.system.SysMenu;
import com.atguigu.vo.system.AssginMenuVo;
+import com.atguigu.vo.system.RouterVo;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
@@ -36,7 +37,7 @@ public interface SysMenuService extends IService {
* @param roleId
* @return
*/
- List findSysMenuByRoleId(Long roleId);
+ List findMenuByRoleId(Long roleId);
/**
* 给角色分配权限
@@ -44,4 +45,20 @@ public interface SysMenuService extends IService {
* @param assignMenuVo
*/
void doAssign(AssginMenuVo assignMenuVo);
+
+ /**
+ * 获取用户操作菜单
+ *
+ * @param userId
+ * @return
+ */
+ List findUserMenuListByUserId(Long userId);
+
+ /**
+ * 获取用户操作按钮
+ *
+ * @param userId
+ * @return
+ */
+ List findUserPermsByUserId(Long userId);
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/SysRoleService.java b/service-oa/src/main/java/com/atguigu/auth/service/SysRoleService.java
index e7730c8..3efc4e9 100644
--- a/service-oa/src/main/java/com/atguigu/auth/service/SysRoleService.java
+++ b/service-oa/src/main/java/com/atguigu/auth/service/SysRoleService.java
@@ -15,10 +15,18 @@ import java.util.Map;
*/
public interface SysRoleService extends IService {
- //查询所有角色和当前用户所属角色
+ /**
+ * 查询所有角色和当前用户所属角色
+ *
+ * @param userId
+ * @return
+ */
Map findRoleByUserId(Long userId);
- //为用户分配角色
-
+ /**
+ * 为用户分配角色
+ *
+ * @param assginRoleVo
+ */
void doAssign(AssginRoleVo assginRoleVo);
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java b/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java
index ccec3eb..0a80652 100644
--- a/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java
+++ b/service-oa/src/main/java/com/atguigu/auth/service/SysUserService.java
@@ -20,4 +20,12 @@ public interface SysUserService extends IService {
* @param status
*/
void updateStatus(Long id, Integer status);
+
+ /**
+ * 根据用户名进行查询
+ *
+ * @param username
+ * @return
+ */
+ SysUser getByUsername(String username);
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysMenuServiceImpl.java b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysMenuServiceImpl.java
index f7569df..422781b 100644
--- a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysMenuServiceImpl.java
+++ b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysMenuServiceImpl.java
@@ -1,18 +1,23 @@
package com.atguigu.auth.service.impl;
import com.atguigu.auth.mapper.SysMenuMapper;
-import com.atguigu.auth.mapper.SysRoleMenuMapper;
import com.atguigu.auth.service.SysMenuService;
+import com.atguigu.auth.service.SysRoleMenuService;
import com.atguigu.auth.utils.MenuHelper;
import com.atguigu.common.execption.GuiguException;
import com.atguigu.model.system.SysMenu;
import com.atguigu.model.system.SysRoleMenu;
import com.atguigu.vo.system.AssginMenuVo;
+import com.atguigu.vo.system.MetaVo;
+import com.atguigu.vo.system.RouterVo;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
+import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -27,8 +32,8 @@ import java.util.stream.Collectors;
@Service
public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService {
-
- private SysRoleMenuMapper sysRoleMenuMapper;
+ @Autowired
+ private SysRoleMenuService sysRoleMenuService;
/**
* 菜单列表
@@ -71,24 +76,36 @@ public class SysMenuServiceImpl extends ServiceImpl impl
* @return
*/
@Override
- public List findSysMenuByRoleId(Long roleId) {
- //查询所有菜单
- List allSysMenuList = this.list(new LambdaQueryWrapper().eq(SysMenu::getStatus, 1));
+ public List findMenuByRoleId(Long roleId) {
+ //1 查询所有菜单- 添加条件 status=1
- //在角色菜单关系表中,根据角色id获取角色对应的所有菜单id
- List sysRoleMenuList = sysRoleMenuMapper.selectList(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, roleId));
- //根据获取菜单id,获取对应菜单对象
+// LambdaQueryWrapper wrapperSysMenu = new LambdaQueryWrapper<>();
+// wrapperSysMenu.eq(SysMenu::getStatus, 1);
+// List allSysMenuList = baseMapper.selectList(wrapperSysMenu);
+
+ List allSysMenuList = baseMapper.selectList(new LambdaQueryWrapper().eq(SysMenu::getStatus, 1));
+
+ //2 根据角色id roleId查询 角色菜单关系表里面 角色id对应所有的菜单id
+// LambdaQueryWrapper wrapperSysRoleMenu = new LambdaQueryWrapper<>();
+// wrapperSysRoleMenu.eq(SysRoleMenu::getRoleId, roleId);
+// List sysRoleMenuList = sysRoleMenuService.list(wrapperSysRoleMenu);
+
+ List sysRoleMenuList = sysRoleMenuService.list(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, roleId));
+ //3 根据获取菜单id,获取对应菜单对象
List menuIdList = sysRoleMenuList.stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList());
- //根据菜单id,和所有菜单集合中id比较,相同则封装
- allSysMenuList.forEach(permission -> {
- if (menuIdList.contains(permission.getId())) {
- permission.setSelect(true);
+
+ //3.1 拿着菜单id 和所有菜单集合里面id进行比较,如果相同封装
+ allSysMenuList.forEach(item -> {
+ if (menuIdList.contains(item.getId())) {
+ item.setSelect(true);
} else {
- permission.setSelect(false);
+ item.setSelect(false);
}
});
- //返回规定格式的菜单列表
- return MenuHelper.buildTree(allSysMenuList);
+
+ //4 返回规定树形显示格式菜单列表
+ List sysMenuList = MenuHelper.buildTree(allSysMenuList);
+ return sysMenuList;
}
/**
@@ -99,7 +116,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl
@Override
public void doAssign(AssginMenuVo assignMenuVo) {
//根据角色id 删除菜单角色表 分配数据
- sysRoleMenuMapper.delete(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, assignMenuVo.getRoleId()));
+ sysRoleMenuService.remove(new LambdaQueryWrapper().eq(SysRoleMenu::getRoleId, assignMenuVo.getRoleId()));
//从参数里面获取角色新分配菜单id列表,
//进行遍历,把每个id 数据添加菜单角色表
for (Long menuId : assignMenuVo.getMenuIdList()) {
@@ -107,8 +124,132 @@ public class SysMenuServiceImpl extends ServiceImpl impl
SysRoleMenu rolePermission = new SysRoleMenu();
rolePermission.setRoleId(assignMenuVo.getRoleId());
rolePermission.setMenuId(menuId);
- sysRoleMenuMapper.insert(rolePermission);
+ sysRoleMenuService.save(rolePermission);
}
}
+ /**
+ * 获取用户操作菜单
+ *
+ * @param userId
+ * @return
+ */
+ @Override
+ public List findUserMenuListByUserId(Long userId) {
+ List sysMenusList = null;
+
+ // 1、判断当前用户是否是管理员 userId=1 是管理员
+ // 1.1、 如果是管理员,查询所有菜单列表
+ if (userId == 1) {
+ // 查询所有菜单列表
+ sysMenusList = baseMapper.selectList(new LambdaQueryWrapper().eq(SysMenu::getStatus, 1).orderByAsc(SysMenu::getSortValue));
+ } else {
+
+ // 1.2、如果不是管理员,根据 userId 查询可以操作菜单列表
+ // 多表关联查询:sys_role、sys_role_menu、sys_menu
+ sysMenusList = baseMapper.findUserMenuListByUserId(userId);
+ }
+ // 2、把查询出来的数据列表, 构建成框架要求的路由结构
+ // 先构建树形结构
+ List sysMenuTreeList = MenuHelper.buildTree(sysMenusList);
+ // 构建框架要求的路由结构
+ return this.buildRouter(sysMenuTreeList);
+ }
+
+ /**
+ * 构建框架要求的路由结构
+ *
+ * @param menus
+ * @return
+ */
+ private List buildRouter(List menus) {
+ // 创建 list 集合,存值最终数据
+ List routers = new ArrayList<>();
+ // menus 遍历
+ for (SysMenu menu : menus) {
+ RouterVo router = new RouterVo();
+ router.setHidden(false);
+ router.setAlwaysShow(false);
+ router.setPath(getRouterPath(menu));
+ router.setComponent(menu.getComponent());
+ router.setMeta(new MetaVo(menu.getName(), menu.getIcon()));
+ // 下一层数据
+ List children = menu.getChildren();
+ if (menu.getType() == 1) {
+ // 加载隐藏路由
+ List hiddenMenuList = children.stream()
+ .filter(item -> !StringUtils.isEmpty(item.getComponent()))
+ .collect(Collectors.toList());
+ for (SysMenu hiddenMenu : hiddenMenuList) {
+ RouterVo hiddenRouter = new RouterVo();
+ hiddenRouter.setHidden(true);
+ hiddenRouter.setAlwaysShow(false);
+ hiddenRouter.setPath(getRouterPath(hiddenMenu));
+ hiddenRouter.setComponent(hiddenMenu.getComponent());
+ hiddenRouter.setMeta(new MetaVo(hiddenMenu.getName(), hiddenMenu.getIcon()));
+ routers.add(hiddenRouter);
+ }
+ } else {
+ if (!CollectionUtils.isEmpty(children)) {
+ if (children.size() > 0) {
+ router.setAlwaysShow(true);
+ }
+ // 递归
+ router.setChildren(buildRouter(children));
+ }
+ }
+ routers.add(router);
+ }
+ return routers;
+
+ }
+
+ /**
+ * 获取路由地址
+ *
+ * @param menu 菜单信息
+ * @return 路由地址
+ */
+ public String getRouterPath(SysMenu menu) {
+ String routerPath = "/" + menu.getPath();
+ if (menu.getParentId().intValue() != 0) {
+ routerPath = menu.getPath();
+ }
+ return routerPath;
+ }
+
+ /**
+ * 获取用户操作按钮
+ *
+ * @param userId
+ * @return
+ */
+ @Override
+ public List findUserPermsByUserId(Long userId) {
+ // 1、判断是否是管理员,如果是管理员,查询所有按钮列表
+ List sysMenusList = null;
+ if (userId == 1) {
+ // 查询所有菜单列表
+ sysMenusList = baseMapper.selectList(new LambdaQueryWrapper().eq(SysMenu::getStatus, 1));
+ } else {
+ // 2、如果不是管理员,根据userId查询可以操作按钮列表
+ // 多表关联查询:sys_role、sys_role_menu、sys_menu
+ sysMenusList = baseMapper.findUserMenuListByUserId(userId);
+ }
+
+ // 3、从查询出来的数据里面,获取可以操作按钮值的List集合,返回
+// List resultList = new ArrayList<>();
+// for (SysMenu item : sysMenusList) {
+// if (item.getType() == 2) {
+// resultList.add(item.getPerms());
+// }
+// }
+// return resultList;
+
+ return sysMenusList.stream()
+ .filter(item -> item.getType() == 2)
+ .map(SysMenu::getPerms)
+ .collect(Collectors.toList());
+ }
+
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java
index 3b55418..a7f0cf2 100644
--- a/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java
+++ b/service-oa/src/main/java/com/atguigu/auth/service/impl/SysUserServiceImpl.java
@@ -3,6 +3,7 @@ package com.atguigu.auth.service.impl;
import com.atguigu.auth.mapper.SysUserMapper;
import com.atguigu.auth.service.SysUserService;
import com.atguigu.model.system.SysUser;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -37,4 +38,15 @@ public class SysUserServiceImpl extends ServiceImpl impl
}
baseMapper.updateById(sysUser);
}
+
+ /**
+ * 根据用户名进行查询
+ *
+ * @param username
+ * @return
+ */
+ @Override
+ public SysUser getByUsername(String username) {
+ return baseMapper.selectOne(new LambdaQueryWrapper().eq(SysUser::getUsername, username));
+ }
}
diff --git a/service-oa/src/main/java/com/atguigu/auth/service/impl/UserDetailsServiceImpl.java b/service-oa/src/main/java/com/atguigu/auth/service/impl/UserDetailsServiceImpl.java
new file mode 100644
index 0000000..e173172
--- /dev/null
+++ b/service-oa/src/main/java/com/atguigu/auth/service/impl/UserDetailsServiceImpl.java
@@ -0,0 +1,39 @@
+package com.atguigu.auth.service.impl;
+
+import com.atguigu.auth.service.SysUserService;
+import com.atguigu.model.system.SysUser;
+import com.atguigu.security.custom.CustomUser;
+import com.atguigu.security.custom.UserDetailsService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Component;
+
+import java.util.Collections;
+
+/**
+ * ClassName: UserDetailsServiceImpl
+ * Package: com.atguigu.auth.service.impl
+ *
+ * @author yovinchen
+ * @Create 2023/6/10 23:31
+ */
+@Component
+public class UserDetailsServiceImpl implements UserDetailsService {
+
+ @Autowired
+ private SysUserService sysUserService;
+
+ @Override
+ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
+ SysUser sysUser = sysUserService.getByUsername(username);
+ if(null == sysUser) {
+ throw new UsernameNotFoundException("用户名不存在!");
+ }
+
+ if(sysUser.getStatus() == 0) {
+ throw new RuntimeException("账号已停用");
+ }
+ return new CustomUser(sysUser, Collections.emptyList());
+ }
+}
diff --git a/service-oa/src/main/resources/application-dev.yml b/service-oa/src/main/resources/application-dev.yml
index 68ac13b..2fd38d7 100644
--- a/service-oa/src/main/resources/application-dev.yml
+++ b/service-oa/src/main/resources/application-dev.yml
@@ -4,6 +4,8 @@ mybatis-plus:
configuration:
# 查看日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+ mapper-locations: classpath:com/atguigu/auth/mapper/xml/*.xml
+
spring:
datasource:
type: com.zaxxer.hikari.HikariDataSource