Commit 877e30a6 LN

用户,角色功能修改

1 个父辈 eba0d589
正在显示 26 个修改的文件 包含 717 行增加186 行删除
...@@ -121,7 +121,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { ...@@ -121,7 +121,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
.antMatchers("/druid/**").permitAll() .antMatchers("/druid/**").permitAll()
// 放行OPTIONS请求 // 放行OPTIONS请求
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll() .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.antMatchers("api/menus/build").permitAll() // .antMatchers("api/menus/build").permitAll()
// 自定义匿名访问所有url放行:允许匿名和带Token访问,细腻化到每个 Request 类型 // 自定义匿名访问所有url放行:允许匿名和带Token访问,细腻化到每个 Request 类型
// GET // GET
.antMatchers(HttpMethod.GET, anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])).permitAll() .antMatchers(HttpMethod.GET, anonymousUrls.get(RequestMethodEnum.GET.getType()).toArray(new String[0])).permitAll()
......
...@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.utils.PageUtil; ...@@ -5,6 +5,7 @@ import com.neotel.smfcore.common.utils.PageUtil;
import com.neotel.smfcore.common.utils.QueryHelp; import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.security.rest.bean.dto.MenuDto; import com.neotel.smfcore.security.rest.bean.dto.MenuDto;
import com.neotel.smfcore.security.rest.bean.mapstruct.GroupMapper; import com.neotel.smfcore.security.rest.bean.mapstruct.GroupMapper;
import com.neotel.smfcore.security.rest.bean.query.GroupQueryCriteria;
import com.neotel.smfcore.security.rest.bean.query.MenuQueryCondition; import com.neotel.smfcore.security.rest.bean.query.MenuQueryCondition;
import com.neotel.smfcore.security.service.manager.IGroupManager; import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.manager.IMenuManager; import com.neotel.smfcore.security.service.manager.IMenuManager;
...@@ -15,6 +16,7 @@ import lombok.RequiredArgsConstructor; ...@@ -15,6 +16,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.java.Log; import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
...@@ -23,8 +25,10 @@ import org.springframework.security.access.prepost.PreAuthorize; ...@@ -23,8 +25,10 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.regex.Pattern; import java.util.regex.Pattern;
...@@ -39,14 +43,22 @@ public class GroupController { ...@@ -39,14 +43,22 @@ public class GroupController {
@Autowired @Autowired
GroupMapper groupMapper; GroupMapper groupMapper;
@ApiOperation("导出分组数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('menu:list')")
public void download(HttpServletResponse response, GroupQueryCriteria criteria) throws Exception {
Query query= QueryHelp.getQuery(criteria);
groupManager.download(groupManager.findByQuery(query), response);
}
@GetMapping @GetMapping
@ApiOperation("查询组列表") @ApiOperation("查询组列表")
// @PreAuthorize("@el.check('groups:list')") // @PreAuthorize("@el.check('groups:list')")
public ResponseEntity<Object> query(@RequestParam String groupname) throws Exception { public ResponseEntity<Object> query(GroupQueryCriteria criteria, Pageable pageable) throws Exception {
Criteria criteria = new Criteria().and("groupName").regex(".*?\\" + groupname.trim() + ".*");
Query query = new Query(criteria); Query query = QueryHelp.getQuery(criteria);
List<Group> groups = groupManager.findByQuery(query); List<Group> groups = groupManager.findByPage(query,pageable);
return new ResponseEntity<>(groupMapper.toDto(groups), HttpStatus.OK); Map<String,Object> data=PageUtil.toPage(groupMapper.toDto(groups),groups.size());
return new ResponseEntity<>(data, HttpStatus.OK);
} }
@ApiOperation("新增分组") @ApiOperation("新增分组")
...@@ -59,15 +71,8 @@ public class GroupController { ...@@ -59,15 +71,8 @@ public class GroupController {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} }
//验证名称是否重复
Group hasGroup=groupManager.findOneByGroupName(resources.getGroupName());
if(hasGroup!=null){
log.info("新增分组: 组名称["+resources.getGroupName()+"]已存在");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
try { try {
groupManager.save(resources); groupManager.saveGroup(resources);
} catch (ValidateException e) { } catch (ValidateException e) {
log.error("新增分组["+resources.getGroupName()+"]出错:"+e); log.error("新增分组["+resources.getGroupName()+"]出错:"+e);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
...@@ -78,12 +83,7 @@ public class GroupController { ...@@ -78,12 +83,7 @@ public class GroupController {
@PutMapping @PutMapping
@PreAuthorize("@el.check('group:edit')") @PreAuthorize("@el.check('group:edit')")
public ResponseEntity<Object> update(@RequestBody Group resources){ public ResponseEntity<Object> update(@RequestBody Group resources){
//验证名称是否重复
Group hasGroup=groupManager.findOneByGroupName(resources.getGroupName());
if(hasGroup!=null&&(hasGroup.getId()!=resources.getId())){
log.info("新增分组: 组名称["+resources.getGroupName()+"]已存在");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
try { try {
groupManager.save(resources); groupManager.save(resources);
} catch (ValidateException e) { } catch (ValidateException e) {
......
...@@ -144,8 +144,9 @@ public class MenuController { ...@@ -144,8 +144,9 @@ public class MenuController {
log.error("menu:add 参数错误:ID不能为空"); log.error("menu:add 参数错误:ID不能为空");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} }
try { try {
menuManager.save(resources); menuManager.saveMenu(resources);
}catch ( Exception exception){ }catch ( Exception exception){
log.error("menu:add 新增菜单["+resources.toString()+"]出错:"+exception); log.error("menu:add 新增菜单["+resources.toString()+"]出错:"+exception);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
...@@ -159,8 +160,9 @@ public class MenuController { ...@@ -159,8 +160,9 @@ public class MenuController {
@PreAuthorize("@el.check('menu:edit')") @PreAuthorize("@el.check('menu:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody Menu resources){ public ResponseEntity<Object> update(@Validated @RequestBody Menu resources){
// public ResponseEntity<Object> update(@Validated(Menu.Update.class) @RequestBody Menu resources){ // public ResponseEntity<Object> update(@Validated(Menu.Update.class) @RequestBody Menu resources){
try { try {
menuManager.save(resources); menuManager.saveMenu(resources);
} catch (ValidateException e) { } catch (ValidateException e) {
log.error("menu:add 修改菜单["+resources.toString()+"]出错:"+e); log.error("menu:add 修改菜单["+resources.toString()+"]出错:"+e);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
...@@ -179,7 +181,12 @@ public class MenuController { ...@@ -179,7 +181,12 @@ public class MenuController {
menuSet.add(menuManager.get(id)); menuSet.add(menuManager.get(id));
menuSet = menuManager.getChildMenus(menuList, menuSet); menuSet = menuManager.getChildMenus(menuList, menuSet);
} }
menuManager.delete(menuSet); try {
menuManager.delete(menuSet);
} catch (ValidateException e) {
log.error("menu:add 删除菜单["+ids+"]出错:"+e);
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
} }
package com.neotel.smfcore.security.rest;
import cn.hutool.core.lang.Dict;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.PageUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.security.rest.bean.dto.RoleDto;
import com.neotel.smfcore.security.rest.bean.mapstruct.RoleMapper;
import com.neotel.smfcore.security.rest.bean.query.RoleQueryCriteria;
import com.neotel.smfcore.security.service.manager.IRoleManager;
import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@RestController
@RequiredArgsConstructor
@Api(tags = "系统:角色管理")
@RequestMapping("/api/roles")
@Slf4j
public class RoleController {
@Autowired
private IUserManager userManager;
@Autowired
private IRoleManager roleManager;
@Autowired
private RoleMapper roleMapper;
@ApiOperation("获取单个role")
@GetMapping(value = "/{id}")
@PreAuthorize("@el.check('roles:list')")
public ResponseEntity<Object> query(@PathVariable String id){
RoleDto dto=roleMapper.toDto(roleManager.get(id));
return new ResponseEntity<>(dto, HttpStatus.OK);
}
@ApiOperation("导出角色数据")
@GetMapping(value = "/download")
@PreAuthorize("@el.check('role:list')")
public void download(HttpServletResponse response, RoleQueryCriteria criteria) throws IOException {
Query query= QueryHelp.getQuery(criteria);
List<Role> roles=roleManager.findByQuery(query);
roleManager.download(roles, response);
}
@ApiOperation("返回全部的角色")
@GetMapping(value = "/all")
@PreAuthorize("@el.check('roles:list','user:add','user:edit')")
public ResponseEntity<Object> query(){
Query query=new Query();
query.with(Sort.by(Sort.Direction.ASC,"levle"));
return new ResponseEntity<>(roleManager.findByQuery(query),HttpStatus.OK);
}
@ApiOperation("查询角色")
@GetMapping
@PreAuthorize("@el.check('roles:list')")
public ResponseEntity<Object> query(RoleQueryCriteria criteria, Pageable pageable){
Query query= QueryHelp.getQuery(criteria);
query.with(Sort.by(Sort.Direction.ASC,"level"));
List<Role> roles=roleManager.findByPage(query,pageable);
List<RoleDto> dtos=roleMapper.toDto(roles);
Map<String ,Object> data= PageUtil.toPage(dtos,dtos.size());
return new ResponseEntity<>(data,HttpStatus.OK);
}
@ApiOperation("获取用户级别")
@GetMapping(value = "/level")
public ResponseEntity<Object> getLevel(){
User curruser = userManager.get(SecurityUtils.getCurrentUserId());
Role currRole=roleManager.get(curruser.getRoleId());
return new ResponseEntity<>(Dict.create().set("level", currRole.getLevel() ),HttpStatus.OK);
}
@ApiOperation("新增角色")
@PostMapping
@PreAuthorize("@el.check('roles:add')")
public ResponseEntity<Object> create(@Validated @RequestBody Role resources){
if (resources.getId() != null) {
// throw new BadRequestException("A new "+ ENTITY_NAME +" cannot already have an ID");
log.error("新增角色:角色ID不为空:"+resources.getId());
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
if(!hasLevel(resources.getLevel()) ) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
try {
roleManager.saveRole(resources);
} catch (ValidateException e) {
log.error("新增角色["+resources.toString()+"]出错::"+e);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(HttpStatus.CREATED);
}
@ApiOperation("修改角色")
@PutMapping
@PreAuthorize("@el.check('roles:edit')")
public ResponseEntity<Object> update(@Validated @RequestBody Role resources){
if(resources.getId()==null){
log.error("修改角色:角色ID为空:");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
if(!hasLevel(resources.getLevel()) ) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
try {
roleManager.saveRole(resources);
} catch (ValidateException e) {
log.error("修改角色["+resources.toString()+"]出错::"+e);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@ApiOperation("修改角色菜单")
@PutMapping(value = "/menu")
@PreAuthorize("@el.check('roles:edit')")
public ResponseEntity<Object> updateMenu(@RequestBody Role resources){
if(resources.getId()==null){
log.error("修改角色菜单["+resources.toString()+"]失败:角色ID不能是空");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
Role role = roleManager.get(resources.getId());
if(!hasLevel(resources.getLevel()) ) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
try {
roleManager.updateMenu(resources);
} catch (ValidateException e) {
log.error("修改角色["+resources.toString()+"]出错::"+e);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
}
@ApiOperation("删除角色")
@DeleteMapping
@PreAuthorize("@el.check('roles:del')")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids){
List<Role> roles=new ArrayList<Role>();
for (String id : ids) {
if(id ==null){
log.error("删除角色出错:ID为空");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
Role role = roleManager.get(id);
if(!hasLevel(role.getLevel()) ) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
// 验证是否被用户关联
List<User> users=userManager.findByRoleId(role.getId());
if(users!=null&& users.size()>0){
log.error("删除角色["+role.toString()+"]出错:有["+users.size()+"]个用户关联改角色");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
roles.add(role);
}
try {
roleManager.deleteRoles(roles);
} catch (ValidateException e) {
log.error("删除角色 ["+ids+"] 出错::"+e);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(HttpStatus.OK);
}
/**
* 如果当前用户的角色级别低于创建用户的角色级别,则抛出权限不足的错误
* @param level /
*/
private boolean hasLevel(Integer level) {
User curruser = userManager.get(SecurityUtils.getCurrentUserId());
Role currRole=roleManager.get(curruser.getRoleId());
if (level < currRole.getLevel()) {
log.error("当前用户["+curruser.getUsername()+"]权限低于 ["+level+"],操作失败");
return false;
}
return true;
}
}
...@@ -18,7 +18,14 @@ package com.neotel.smfcore.security.rest; ...@@ -18,7 +18,14 @@ package com.neotel.smfcore.security.rest;
import com.neotel.smfcore.common.annotation.QueryCondition; import com.neotel.smfcore.common.annotation.QueryCondition;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.PageUtil; import com.neotel.smfcore.common.utils.PageUtil;
import com.neotel.smfcore.common.utils.QueryHelp;
import com.neotel.smfcore.common.utils.RsaUtils;
import com.neotel.smfcore.common.utils.SecurityUtils; import com.neotel.smfcore.common.utils.SecurityUtils;
import com.neotel.smfcore.security.bean.RsaProperties;
import com.neotel.smfcore.security.rest.bean.dto.RoleSmallDto;
import com.neotel.smfcore.security.rest.bean.dto.UserDto;
import com.neotel.smfcore.security.rest.bean.mapstruct.UserMapper;
import com.neotel.smfcore.security.rest.bean.query.UserQueryCriteria;
import com.neotel.smfcore.security.rest.bean.vo.UserPassVo; import com.neotel.smfcore.security.rest.bean.vo.UserPassVo;
import com.neotel.smfcore.security.service.manager.IRoleManager; import com.neotel.smfcore.security.service.manager.IRoleManager;
import com.neotel.smfcore.security.service.manager.IUserManager; import com.neotel.smfcore.security.service.manager.IUserManager;
...@@ -30,6 +37,7 @@ import lombok.RequiredArgsConstructor; ...@@ -30,6 +37,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
...@@ -37,6 +45,10 @@ import org.springframework.security.crypto.password.PasswordEncoder; ...@@ -37,6 +45,10 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Set; import java.util.Set;
/** /**
...@@ -55,41 +67,28 @@ public class UserController { ...@@ -55,41 +67,28 @@ public class UserController {
private IUserManager userManager; private IUserManager userManager;
@Autowired @Autowired
private IRoleManager roleManager; private IRoleManager roleManager;
// @Autowired
// private UserMapper userMapper;
// @ApiOperation("导出用户数据") @ApiOperation("导出用户数据")
// @GetMapping(value = "/download") @GetMapping(value = "/download")
// @PreAuthorize("@el.check('user:list')") @PreAuthorize("@el.check('user:list')")
// public void download(HttpServletResponse response, UserQueryCriteria criteria) throws IOException { public void download(HttpServletResponse response, UserQueryCriteria criteria) throws IOException {
// userService.download(userService.queryAll(criteria), response); Query query=QueryHelp.getQuery(criteria);
// } List<User> users=userManager.findByQuery(query);
userManager.download(users, response);
}
@ApiOperation("查询用户") @ApiOperation("查询用户")
@GetMapping @GetMapping
@PreAuthorize("@el.check('user:list')") @PreAuthorize("@el.check('user:list')")
// public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable){ // public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable){
public ResponseEntity<Object> query(QueryCondition criteria, Pageable pageable){ public ResponseEntity<Object> query(UserQueryCriteria criteria, Pageable pageable) {
// if (!ObjectUtils.isEmpty(criteria.getDeptId())) { Query query = QueryHelp.getQuery(criteria);
// criteria.getDeptIds().add(criteria.getDeptId()); List<User> users = userManager.findByPage(query, pageable);
// // 先查找是否存在子节点 List<UserDto> dtos = userManager.listToDto(users);
// List<Dept> data = deptService.findByPid(criteria.getDeptId()); Map<String, Object> data = PageUtil.toPage(dtos, dtos.size());
// // 然后把子节点的ID都加入到集合中 return new ResponseEntity<>(data, HttpStatus.OK);
// criteria.getDeptIds().addAll(deptService.getDeptChildren(data));
// }
// // 数据权限
// List<Long> dataScopes = dataService.getDeptIds(userService.findByName(SecurityUtils.getCurrentUsername()));
// // criteria.getDeptIds() 不为空并且数据权限不为空则取交集
// if (!CollectionUtils.isEmpty(criteria.getDeptIds()) && !CollectionUtils.isEmpty(dataScopes)){
// // 取交集
// criteria.getDeptIds().retainAll(dataScopes);
// if(!CollectionUtil.isEmpty(criteria.getDeptIds())){
// return new ResponseEntity<>(userService.queryAll(criteria,pageable), HttpStatus.OK);
// }
// } else {
// // 否则取并集
// criteria.getDeptIds().addAll(dataScopes);
// return new ResponseEntity<>(userService.queryAll(criteria,pageable), HttpStatus.OK);
// }
return new ResponseEntity<>(PageUtil.toPage(null,0), HttpStatus.OK);
} }
@ApiOperation("新增用户") @ApiOperation("新增用户")
...@@ -146,7 +145,20 @@ public class UserController { ...@@ -146,7 +145,20 @@ public class UserController {
@PreAuthorize("@el.check('user:del')") @PreAuthorize("@el.check('user:del')")
public ResponseEntity<Object> delete(@RequestBody Set<String> ids){ public ResponseEntity<Object> delete(@RequestBody Set<String> ids){
for (String id : ids) { for (String id : ids) {
//不能删除自己
String currId=SecurityUtils.getCurrentUserId();
if(currId==id){
log.error("删除用户:不能删除自己");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
User user=userManager.get(id); User user=userManager.get(id);
//admin的用户不让删除
if(user.getUsername().equals("admin")){
log.error("删除用户:admin用户不能删除");
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
if(!hasLevel(user)) { if(!hasLevel(user)) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
} }
...@@ -181,19 +193,19 @@ public class UserController { ...@@ -181,19 +193,19 @@ public class UserController {
// @Log("修改邮箱") @ApiOperation("修改邮箱")
// @ApiOperation("修改邮箱") @PostMapping(value = "/updateEmail/{code}")
// @PostMapping(value = "/updateEmail/{code}") public ResponseEntity<Object> updateEmail(@PathVariable String code, @RequestBody User user) throws Exception {
// public ResponseEntity<Object> updateEmail(@PathVariable String code, @RequestBody User user) throws Exception { String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey, user.getPassword());
// String password = RsaUtils.decryptByPrivateKey(RsaProperties.privateKey,user.getPassword()); User myUser = userManager.findByUserName(SecurityUtils.getCurrentUsername());
// UserDto userDto = userService.findByName(SecurityUtils.getCurrentUsername()); if(!passwordEncoder.matches(password, myUser.getPassword())){
// if(!passwordEncoder.matches(password, userDto.getPassword())){ log.error("用户["+SecurityUtils.getCurrentUsername()+"]修改邮箱失败,密码错误");
// throw new BadRequestException("密码错误"); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
// } }
// verificationCodeService.validated(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey() + user.getEmail(), code); // verificationCodeService.validated(CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey() + user.getEmail(), code);
// userService.updateEmail(userDto.getUsername(),user.getEmail()); userManager.updateEmail(myUser.getUsername(),myUser.getEmail());
// return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
// } }
/** /**
* 如果当前用户的角色级别低于创建用户的角色级别,则抛出权限不足的错误 * 如果当前用户的角色级别低于创建用户的角色级别,则抛出权限不足的错误
...@@ -208,6 +220,15 @@ public class UserController { ...@@ -208,6 +220,15 @@ public class UserController {
log.error("当前用户["+curruser.getUsername()+"]权限低于用户["+resources.getUsername()+"],操作失败"); log.error("当前用户["+curruser.getUsername()+"]权限低于用户["+resources.getUsername()+"],操作失败");
return false; return false;
} }
//如果当前用户不是管理员,不能修改管理员
if(resources.getIsAdmin()){
if(curruser.getIsAdmin().equals(false)){
log.error("当前用户["+curruser.getUsername()+"]权限低于管理员用户["+resources.getUsername()+"],操作失败");
return false;
}
}
return true; return true;
} }
} }
...@@ -69,11 +69,16 @@ public class MenuDto implements Serializable { ...@@ -69,11 +69,16 @@ public class MenuDto implements Serializable {
private String icon; private String icon;
public Boolean getHasChildren() { public Boolean getHasChildren() {
if(subCount==null){
return false;
}
return subCount > 0; return subCount > 0;
} }
public Boolean getLeaf() { public Boolean getLeaf() {
return subCount <= 0; if(subCount==null){
return true;
}return subCount <= 0;
} }
public String getLabel() { public String getLabel() {
......
package com.neotel.smfcore.security.rest.bean.dto;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Set;
@Setter
@Getter
public class RoleDto implements Serializable {
private String id;
private Set<String> menus;
private String name;
private String dataScope;
private Integer level;
private String description;
}
...@@ -15,14 +15,16 @@ ...@@ -15,14 +15,16 @@
*/ */
package com.neotel.smfcore.security.rest.bean.dto; package com.neotel.smfcore.security.rest.bean.dto;
import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
@Data @Data
@AllArgsConstructor
public class RoleSmallDto implements Serializable { public class RoleSmallDto implements Serializable {
private Long id; private String id;
private String name; private String name;
......
package com.neotel.smfcore.security.rest.bean.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.Date;
import java.util.Set;
@Getter
@Setter
public class UserDto implements Serializable {
private String id;
private String roleId;
private String username;
private String email;
@JSONField(serialize = false)
private String password;
private Boolean enabled;
@JSONField(serialize = false)
private Boolean isAdmin = false;
private Date pwdResetTime;
private Set<String> groups;
private String roleName;
}
package com.neotel.smfcore.security.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.security.rest.bean.dto.RoleDto;
import com.neotel.smfcore.security.service.po.Role;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring",unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface RoleMapper extends BaseMapper<RoleDto, Role> {
}
package com.neotel.smfcore.security.rest.bean.mapstruct;
import com.neotel.smfcore.common.base.BaseMapper;
import com.neotel.smfcore.security.rest.bean.dto.UserDto;
import com.neotel.smfcore.security.service.po.User;
import org.mapstruct.Mapper;
import org.mapstruct.ReportingPolicy;
@Mapper(componentModel = "spring" ,unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface UserMapper extends BaseMapper<UserDto, User> {
}
package com.neotel.smfcore.security.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import java.util.Date;
import java.util.List;
public class GroupQueryCriteria {
@QueryCondition(blurry = "groupName")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN)
private List<Date> createTime;
@QueryCondition
private String id;
}
package com.neotel.smfcore.security.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;
public class RoleQueryCriteria implements Serializable {
@QueryCondition(blurry = "name,description")
private String blurry;
@QueryCondition(type = QueryCondition.Type.BETWEEN)
private List<Timestamp> createTime;
@QueryCondition
private String id;
}
package com.neotel.smfcore.security.rest.bean.query;
import com.neotel.smfcore.common.annotation.QueryCondition;
import lombok.Data;
import org.springframework.data.mongodb.repository.Query;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Data
public class UserQueryCriteria implements Serializable {
@QueryCondition
private String id;
@QueryCondition(blurry = "email,username")
private String blurry;
@QueryCondition
private Boolean enabled;
@QueryCondition
private String roleId;
@QueryCondition(type = QueryCondition.Type.BETWEEN)
private List<Timestamp> createTime;
}
...@@ -27,66 +27,13 @@ public interface IUserDao extends IBaseDao { ...@@ -27,66 +27,13 @@ public interface IUserDao extends IBaseDao {
*/ */
User findByEmail(String email); User findByEmail(String email);
/**
* 修改密码
* @param username 用户名
* @param pass 密码
* @param lastPasswordResetTime /
*/
void updatePass(String username, String pass, Date lastPasswordResetTime);
/**
* 修改邮箱
* @param username 用户名
* @param email 邮箱
*/
void updateEmail(String username, String email);
/** /**
* 根据角色查询用户 * 根据角色查询用户
* @param roleId / * @param roleId /
* @return / * @return /
*/ */
List<User> findByRoleId(Long roleId); List<User> findByRoleId(String roleId);
/**
* 根据角色中的部门查询
* @param deptId /
* @return /
*/
List<User> findByRoleDeptId(Long deptId);
/**
* 根据菜单查询
* @param id 菜单ID
* @return /
*/
List<User> findByMenuId(Long id);
/**
* 根据Id删除
* @param ids /
*/
void deleteAllByIdIn(Set<Long> ids);
/**
* 根据岗位查询
* @param ids /
* @return /
*/
int countByJobs(Set<Long> ids);
/**
* 根据部门查询
* @param deptIds /
* @return /
*/
int countByDepts(Set<Long> deptIds);
/**
* 根据角色查询
* @param ids /
* @return /
*/
int countByRoles(Set<Long> ids);
} }
...@@ -21,6 +21,6 @@ public class MenuDaoImpl extends AbstractBaseDao implements IMenuDao { ...@@ -21,6 +21,6 @@ public class MenuDaoImpl extends AbstractBaseDao implements IMenuDao {
@Override @Override
public List<Menu> findByPid(String pid) { public List<Menu> findByPid(String pid) {
return super.findOneByCondition(new String[] {"pid"}, new String[] {pid}); return super.findListByCondition(new String[] {"pid"}, new String[] {pid});
} }
} }
...@@ -4,6 +4,9 @@ import com.neotel.smfcore.common.base.AbstractBaseDao; ...@@ -4,6 +4,9 @@ import com.neotel.smfcore.common.base.AbstractBaseDao;
import com.neotel.smfcore.security.service.OnlineUserService; import com.neotel.smfcore.security.service.OnlineUserService;
import com.neotel.smfcore.security.service.dao.IUserDao; import com.neotel.smfcore.security.service.dao.IUserDao;
import com.neotel.smfcore.security.service.po.User; import com.neotel.smfcore.security.service.po.User;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
...@@ -33,49 +36,10 @@ public class UserDaoImpl extends AbstractBaseDao implements IUserDao { ...@@ -33,49 +36,10 @@ public class UserDaoImpl extends AbstractBaseDao implements IUserDao {
} }
@Override
public void updatePass(String username, String pass, Date lastPasswordResetTime) {
}
@Override
public void updateEmail(String username, String email) {
}
@Override
public List<User> findByRoleId(Long roleId) {
return null;
}
@Override
public List<User> findByRoleDeptId(Long deptId) {
return null;
}
@Override @Override
public List<User> findByMenuId(Long id) { public List<User> findByRoleId(String roleId) {
return null; return super.findOneByCondition(new String[] {"roleId"}, new String[] {roleId});
} }
@Override
public void deleteAllByIdIn(Set<Long> ids) {
}
@Override
public int countByJobs(Set<Long> ids) {
return 0;
}
@Override
public int countByDepts(Set<Long> deptIds) {
return 0;
}
@Override
public int countByRoles(Set<Long> ids) {
return 0;
}
} }
package com.neotel.smfcore.security.service.manager; package com.neotel.smfcore.security.service.manager;
import com.neotel.smfcore.common.base.IBaseManager; import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.security.service.po.Group; import com.neotel.smfcore.security.service.po.Group;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
public interface IGroupManager extends IBaseManager<Group> { public interface IGroupManager extends IBaseManager<Group> {
Group getByGroupName(String groupName);
Group saveGroup(Group resources) throws ValidateException;
void download(List<Group> byQuery, HttpServletResponse response) throws IOException;
} }
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
package com.neotel.smfcore.security.service.manager; package com.neotel.smfcore.security.service.manager;
import com.neotel.smfcore.common.base.IBaseManager; import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.security.rest.bean.dto.MenuDto; import com.neotel.smfcore.security.rest.bean.dto.MenuDto;
import com.neotel.smfcore.security.rest.bean.vo.MenuVo; import com.neotel.smfcore.security.rest.bean.vo.MenuVo;
import com.neotel.smfcore.security.service.po.Menu; import com.neotel.smfcore.security.service.po.Menu;
...@@ -71,5 +72,7 @@ public interface IMenuManager extends IBaseManager<Menu> { ...@@ -71,5 +72,7 @@ public interface IMenuManager extends IBaseManager<Menu> {
* 删除 * 删除
* @param menuSet / * @param menuSet /
*/ */
void delete(Set<Menu> menuSet); void delete(Set<Menu> menuSet) throws ValidateException;
Menu saveMenu(Menu menu) throws ValidateException;
} }
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package com.neotel.smfcore.security.service.manager; package com.neotel.smfcore.security.service.manager;
import com.neotel.smfcore.common.base.IBaseManager; import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.security.service.po.Role; import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User; import com.neotel.smfcore.security.service.po.User;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
...@@ -32,4 +33,13 @@ import java.util.Set; ...@@ -32,4 +33,13 @@ import java.util.Set;
public interface IRoleManager extends IBaseManager<Role> { public interface IRoleManager extends IBaseManager<Role> {
void download(List<Role> roles, HttpServletResponse response) throws IOException;
Role saveRole(Role user) throws ValidateException;
void updateMenu(Role resources) throws ValidateException;
void deleteRoles(List<Role> roles) throws ValidateException;
void untiedMenu(String menuId) throws ValidateException;
} }
...@@ -17,10 +17,8 @@ package com.neotel.smfcore.security.service.manager; ...@@ -17,10 +17,8 @@ package com.neotel.smfcore.security.service.manager;
import com.neotel.smfcore.common.base.IBaseManager; import com.neotel.smfcore.common.base.IBaseManager;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.security.rest.bean.dto.UserDto;
import com.neotel.smfcore.security.service.po.User; import com.neotel.smfcore.security.service.po.User;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
...@@ -62,4 +60,12 @@ public interface IUserManager extends IBaseManager<User> { ...@@ -62,4 +60,12 @@ public interface IUserManager extends IBaseManager<User> {
* @param ids * @param ids
*/ */
void deleteUsers(Set<String> ids) throws ValidateException; void deleteUsers(Set<String> ids) throws ValidateException;
List<User> findByRoleId(String roleId);
void download(List<User> users, HttpServletResponse response) throws IOException;
void updateEmail(String username, String email);
List<UserDto> listToDto(List<User> users);
} }
package com.neotel.smfcore.security.service.manager.impl; package com.neotel.smfcore.security.service.manager.impl;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.security.service.dao.IGroupDao; import com.neotel.smfcore.security.service.dao.IGroupDao;
import com.neotel.smfcore.security.service.manager.IGroupManager; import com.neotel.smfcore.security.service.manager.IGroupManager;
import com.neotel.smfcore.security.service.po.Group; import com.neotel.smfcore.security.service.po.Group;
import com.neotel.smfcore.security.service.po.Menu;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map;
@Service @Service
public class GroupManagerImpl implements IGroupManager { public class GroupManagerImpl implements IGroupManager {
@Autowired @Autowired
...@@ -21,6 +30,35 @@ public class GroupManagerImpl implements IGroupManager { ...@@ -21,6 +30,35 @@ public class GroupManagerImpl implements IGroupManager {
} }
@Override @Override
public Group saveGroup(Group resources) throws ValidateException {
String logName="新增分组:";
Criteria c = Criteria.where("groupName").is(resources.getGroupName());
if (resources.getId() != null) {
c.and("id").ne(resources.getId());
logName="修改分组:";
}
Query que = new Query(c);
List<Group> groups = findByQuery(que);
if (groups != null && groups.size() > 0) {
throw new ValidateException(logName+"组名称[" + resources.getGroupName() + "]已存在");
}
return groupDao.save(resources);
}
@Override
public void download(List<Group> groups, HttpServletResponse response)throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (Group group : groups) {
Map<String,Object> map = new LinkedHashMap<>();
map.put("组ID", group.getId());
map.put("组名称", group.getGroupName());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
public Group get(String id) { public Group get(String id) {
return groupDao.findOneById(id); return groupDao.findOneById(id);
} }
...@@ -45,8 +83,4 @@ public class GroupManagerImpl implements IGroupManager { ...@@ -45,8 +83,4 @@ public class GroupManagerImpl implements IGroupManager {
return groupDao.findByQuery(query); return groupDao.findByQuery(query);
} }
@Override
public Group findOneByGroupName(String groupName) {
return groupDao.findOneByCondition(new String[]{"groupName"},new String[]{groupName});
}
} }
...@@ -208,8 +208,10 @@ public class MenuManagerImpl implements IMenuManager { ...@@ -208,8 +208,10 @@ public class MenuManagerImpl implements IMenuManager {
} }
@Override @Override
public void delete(Set<Menu> menuSet) { public void delete(Set<Menu> menuSet) throws ValidateException {
for (Menu menu : menuSet) { for (Menu menu : menuSet) {
this.delete(menu);
roleManager.untiedMenu(menu.getId());
// 清理缓存 // 清理缓存
// delCaches(menu.getId()); // delCaches(menu.getId());
// roleService.untiedMenu(menu.getId()); // roleService.untiedMenu(menu.getId());
...@@ -217,6 +219,26 @@ public class MenuManagerImpl implements IMenuManager { ...@@ -217,6 +219,26 @@ public class MenuManagerImpl implements IMenuManager {
// updateSubCnt(menu.getPid()); // updateSubCnt(menu.getPid());
} }
} }
@Override
public Menu saveMenu(Menu menu) throws ValidateException {
if(menu.getChildren()==null){
menu.setChildren(new ArrayList<Menu>());
}
if(menu.getSubCount()==null){
menu.setSubCount(0);
}
if(menu.getPermission()==null){
menu.setPermission("");
}
if(menu.getComponent()==null){
menu.setComponent("");
}
if(menu.getComponentName()==null){
menu.setComponentName("");
}
return menuDao.save(menu);
}
// /** // /**
// * 清理缓存 // * 清理缓存
// * @param id 菜单ID // * @param id 菜单ID
......
package com.neotel.smfcore.security.service.manager.impl; package com.neotel.smfcore.security.service.manager.impl;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.security.service.dao.IRoleDao; import com.neotel.smfcore.security.service.dao.IRoleDao;
import com.neotel.smfcore.security.service.dao.IUserDao; import com.neotel.smfcore.security.service.dao.IUserDao;
import com.neotel.smfcore.security.service.manager.IRoleManager; import com.neotel.smfcore.security.service.manager.IRoleManager;
import com.neotel.smfcore.security.service.manager.IUserManager; import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Role; import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User; import com.neotel.smfcore.security.service.po.User;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.core.query.Criteria; import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update; import org.springframework.data.mongodb.core.query.Update;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.*;
/** /**
* Created by kangmor on 2015/12/1. * Created by kangmor on 2015/12/1.
*/ */
@Service @Service
@Slf4j
public class RoleManagerImpl implements IRoleManager { public class RoleManagerImpl implements IRoleManager {
@Autowired @Autowired
...@@ -31,8 +38,8 @@ public class RoleManagerImpl implements IRoleManager { ...@@ -31,8 +38,8 @@ public class RoleManagerImpl implements IRoleManager {
} }
@Override @Override
public Role save(Role user) throws ValidateException { public Role save(Role role) throws ValidateException {
return roleDao.save(user); return roleDao.save(role);
} }
@Override @Override
...@@ -49,4 +56,77 @@ public class RoleManagerImpl implements IRoleManager { ...@@ -49,4 +56,77 @@ public class RoleManagerImpl implements IRoleManager {
public List<Role> findByQuery(Query query) { public List<Role> findByQuery(Query query) {
return roleDao.findByQuery(query); return roleDao.findByQuery(query);
} }
@Override
public void download(List<Role> roles, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (Role role : roles) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("角色名称", role.getName());
map.put("角色级别", role.getLevel());
map.put("描述", role.getDescription());
map.put("创建日期", role.getCreateDate());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
public Role saveRole(Role role) throws ValidateException {
if (role.getLevel() == null) {
role.setLevel(99);
}
if (role.getMenus() == null) {
role.setMenus(new HashSet<String>());
}
if (role.getDataScope() == null) {
role.setDataScope("全部");
}
if (role.getDescription() == null) {
role.setDescription("");
}
String logName="新增角色:";
Criteria c = Criteria.where("name").is(role.getName());
if (role.getId() != null) {
c = c.and("id").ne(role.getId());
logName="修改角色:";
}
Query query = new Query(c);
List<Role> roles = findByQuery(query);
if (roles != null && roles.size() > 0) {
log.error(logName+"[" + role.toString() + "]出错:角色名[" + role.getName() + "]已存在");
throw new ValidateException(logName+"角色名[" + role.getName() + "]已存在");
}
return roleDao.save(role);
}
@Override
public void updateMenu(Role resources) throws ValidateException {
this.save(resources);
// List<User> users = userRepository.findByRoleId(role.getId());
// // 更新菜单
// role.setMenus(resources.getMenus());
// delCaches(resources.getId(), users);
// roleRepository.save(role);
}
@Override
public void deleteRoles(List<Role> roles) throws ValidateException {
for (Role role:roles ) {
this.delete(role);
}
}
@Override
public void untiedMenu(String menuId) throws ValidateException {
Query query = new Query(Criteria.where("menus").all(menuId));
List<Role> roles = roleDao.findByQuery(query);
for (Role role : roles
) {
Set<String> menus = role.getMenus();
menus.remove(menuId);
role.setMenus(menus);
this.save(role);
}
}
} }
...@@ -2,8 +2,15 @@ package com.neotel.smfcore.security.service.manager.impl; ...@@ -2,8 +2,15 @@ package com.neotel.smfcore.security.service.manager.impl;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.neotel.smfcore.common.exception.ValidateException; import com.neotel.smfcore.common.exception.ValidateException;
import com.neotel.smfcore.common.utils.FileUtil;
import com.neotel.smfcore.security.rest.bean.dto.RoleSmallDto;
import com.neotel.smfcore.security.rest.bean.dto.UserDto;
import com.neotel.smfcore.security.rest.bean.mapstruct.RoleMapper;
import com.neotel.smfcore.security.rest.bean.mapstruct.UserMapper;
import com.neotel.smfcore.security.service.dao.IUserDao; import com.neotel.smfcore.security.service.dao.IUserDao;
import com.neotel.smfcore.security.service.manager.IRoleManager;
import com.neotel.smfcore.security.service.manager.IUserManager; import com.neotel.smfcore.security.service.manager.IUserManager;
import com.neotel.smfcore.security.service.po.Role;
import com.neotel.smfcore.security.service.po.User; import com.neotel.smfcore.security.service.po.User;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
...@@ -13,18 +20,22 @@ import org.springframework.data.mongodb.core.query.Query; ...@@ -13,18 +20,22 @@ import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update; import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import javax.servlet.http.HttpServletResponse;
import java.util.List; import java.io.IOException;
import java.util.Set; import java.util.*;
import java.util.stream.Collectors;
/** /**
* Created by kangmor on 2015/12/1. * Created by kangmor on 2015/12/1.
*/ */
@Service @Service
public class UserManagerImpl implements IUserManager { public class UserManagerImpl implements IUserManager {
@Autowired
private UserMapper userMapper;
@Autowired @Autowired
protected IUserDao userDao; protected IUserDao userDao;
@Autowired
protected IRoleManager roleManager;
@Override @Override
public User findByUserName(String username) { public User findByUserName(String username) {
...@@ -47,7 +58,10 @@ public class UserManagerImpl implements IUserManager { ...@@ -47,7 +58,10 @@ public class UserManagerImpl implements IUserManager {
if(!user.getEnabled()){ if(!user.getEnabled()){
} }
dataUser.setUsername(user.getUsername()); //用户名admin不能修改
if(!dataUser.equals("admin")){
dataUser.setUsername(user.getUsername());
}
dataUser.setEmail(user.getEmail()); dataUser.setEmail(user.getEmail());
dataUser.setEnabled(user.getEnabled()); dataUser.setEnabled(user.getEnabled());
dataUser.setIsAdmin(user.getIsAdmin());; dataUser.setIsAdmin(user.getIsAdmin());;
...@@ -60,18 +74,23 @@ public class UserManagerImpl implements IUserManager { ...@@ -60,18 +74,23 @@ public class UserManagerImpl implements IUserManager {
public void updateCenter(User resources) { public void updateCenter(User resources) {
User dataUser=this.get(resources.getId()); User dataUser=this.get(resources.getId());
if(dataUser!=null){ if(dataUser!=null){
//用户名admin不能修改
if(!dataUser.equals("admin")){
dataUser.setUsername(resources.getUsername());
}
dataUser.setUsername(resources.getUsername());
dataUser.setEmail(resources.getEmail()); dataUser.setEmail(resources.getEmail());
} }
userDao.save(dataUser); userDao.save(dataUser);
} }
@Override @Override
public void deleteUsers(Set<String> ids) throws ValidateException{ public void deleteUsers(Set<String> ids) throws ValidateException {
for (String id:ids for (String id : ids ) {
) { User user = get(id);
User user=get(id); if (user != null) {
if(user!=null){ this.delete(user);
this.delete(user);
} }
} }
} }
...@@ -100,4 +119,52 @@ public class UserManagerImpl implements IUserManager { ...@@ -100,4 +119,52 @@ public class UserManagerImpl implements IUserManager {
public List<User> findByQuery(Query query) { public List<User> findByQuery(Query query) {
return userDao.findByQuery(query); return userDao.findByQuery(query);
} }
@Override
public List<User> findByRoleId(String roleId){
List<User> users = userDao.findOneByCondition(new String[] {"roleId"}, new String[] {roleId});
return users;
}
@Override
public void download(List<User> queryAll, HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = new ArrayList<>();
for (User user : queryAll) {
Map<String, Object> map = new LinkedHashMap<>();
map.put("用户名", user.getUsername());
map.put("角色", user.getRoleId());
map.put("邮箱", user.getEmail());
map.put("状态", user.getEnabled() ? "启用" : "禁用");
map.put("修改密码的时间", user.getPwdResetTime());
map.put("创建日期", user.getCreateDate());
list.add(map);
}
FileUtil.downloadExcel(list, response);
}
@Override
public void updateEmail(String username, String email) {
Criteria c = Criteria.where("username").is(username);
Query query = Query.query(c);
Update update = Update.update("email","email");
userDao.updateFirst(query,update);
}
@Override
public List<UserDto> listToDto(List<User> users) {
List<UserDto> dtos = userMapper.toDto(users);
for (int i=0;i< dtos.size();i++ )
{
String roleId=dtos.get(i).getRoleId();
if(roleId!=null){
Role role=roleManager.get(dtos.get(i).getRoleId());
if(role!=null){
// dtos.get(i).setRole(new RoleSmallDto(roleId,role.getName(),role.getLevel(),role.getDataScope()));
dtos.get(i).setRoleName(role.getName());
}
}
}
return dtos;
}
} }
...@@ -91,11 +91,16 @@ public class Menu extends BasePo implements Serializable { ...@@ -91,11 +91,16 @@ public class Menu extends BasePo implements Serializable {
private String icon; private String icon;
public Boolean getHasChildren() { public Boolean getHasChildren() {
if(subCount==0){
return false;
}
return subCount > 0; return subCount > 0;
} }
public Boolean getLeaf() { public Boolean getLeaf() {
return subCount <= 0; if(subCount==0){
return true;
}return subCount <= 0;
} }
public String getLabel() { public String getLabel() {
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!