Merge pull request #23 from lingting-gzm/master

 添加新功能
This commit is contained in:
b2baccline
2020-07-06 10:06:16 +08:00
13 changed files with 155 additions and 46 deletions

View File

@@ -0,0 +1,23 @@
package com.hccake.ballcat.admin.modules.sys.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @author lingting 2020/6/24 21:46
*/
@Data
@ConfigurationProperties(prefix = "ballcat.admin.rule")
public class AdminRuleConfig {
/**
* 指定id的用户为超级管理员
*/
private int id = -1;
/**
* 指定 username 为超级管理员
*/
private String username;
}

View File

@@ -12,6 +12,7 @@ import com.hccake.ballcat.admin.modules.sys.service.SysRoleService;
import com.hccake.ballcat.commom.log.operation.annotation.CreateOperationLogging;
import com.hccake.ballcat.commom.log.operation.annotation.DeleteOperationLogging;
import com.hccake.ballcat.commom.log.operation.annotation.UpdateOperationLogging;
import com.hccake.ballcat.common.core.result.BaseResultCode;
import com.hccake.ballcat.common.core.result.R;
import com.hccake.ballcat.common.core.vo.SelectData;
import io.swagger.annotations.Api;
@@ -46,8 +47,8 @@ public class SysRoleController {
*/
@GetMapping("/page")
@PreAuthorize("@per.hasPermission('sys:sysrole:read')")
public R<IPage<SysRole>> getRolePage(Page<SysRole> page, SysRoleQO sysRoleQO) {
return R.ok(sysRoleService.page(page, sysRoleQO));
public R<IPage<SysRole>> getRolePage(Page<SysRole> page, SysRoleQO sysRoleQo) {
return R.ok(sysRoleService.page(page, sysRoleQo));
}
/**
@@ -57,7 +58,7 @@ public class SysRoleController {
*/
@GetMapping("/{id}")
@PreAuthorize("@per.hasPermission('sys:sysrole:read')")
public R getById(@PathVariable Integer id) {
public R<SysRole> getById(@PathVariable Integer id) {
return R.ok(sysRoleService.getById(id));
}
@@ -70,7 +71,7 @@ public class SysRoleController {
@CreateOperationLogging(msg = "新增系统角色")
@PostMapping
@PreAuthorize("@per.hasPermission('sys:sysrole:add')")
public R save(@Valid @RequestBody SysRole sysRole) {
public R<Boolean> save(@Valid @RequestBody SysRole sysRole) {
return R.ok(sysRoleService.save(sysRole));
}
@@ -83,20 +84,29 @@ public class SysRoleController {
@UpdateOperationLogging(msg = "修改系统角色")
@PutMapping
@PreAuthorize("@per.hasPermission('sys:sysrole:edit')")
public R update(@Valid @RequestBody SysRole role) {
public R<Boolean> update(@Valid @RequestBody SysRole role) {
SysRole oldRole = sysRoleService.getById(role.getId());
if (oldRole.isSystem()) {
// 系统角色不能被取消
role.setSystem(oldRole.isSystem());
}
return R.ok(sysRoleService.updateById(role));
}
/**
* 删除角色
* @param id
* @return
* @param id id
* @return 结果信息
*/
@DeleteMapping("/{id}")
@ApiOperation(value = "通过id删除系统角色", notes = "通过id删除系统角色")
@DeleteOperationLogging(msg = "通过id删除系统角色")
@PreAuthorize("@per.hasPermission('sys:sysrole:del')")
public R removeById(@PathVariable Integer id) {
public R<Boolean> removeById(@PathVariable Integer id) {
SysRole oldRole = sysRoleService.getById(id);
if (oldRole.isSystem()) {
return R.failed(BaseResultCode.LOGIC_CHECK_ERROR, "系统角色不允许被删除!");
}
return R.ok(sysRoleService.removeRoleById(id));
}
@@ -105,7 +115,7 @@ public class SysRoleController {
* @return 角色列表
*/
@GetMapping("/list")
public R listRoles() {
public R<List<SysRole>> listRoles() {
return R.ok(sysRoleService.list(Wrappers.emptyWrapper()));
}
@@ -119,7 +129,7 @@ public class SysRoleController {
@ApiOperation(value = "更新角色权限", notes = "更新角色权限")
@UpdateOperationLogging(msg = "更新角色权限")
@PreAuthorize("@per.hasPermission('sys:sysrole:grant')")
public R savePermissionIds(@PathVariable Integer roleId, @RequestBody Integer[] permissionIds) {
public R<Boolean> savePermissionIds(@PathVariable Integer roleId, @RequestBody Integer[] permissionIds) {
return R.ok(sysRolePermissionService.saveRolePermissions(roleId, permissionIds));
}
@@ -129,7 +139,7 @@ public class SysRoleController {
* @return 属性集合
*/
@GetMapping("/permission/ids/{roleId}")
public R getPermissionIds(@PathVariable Integer roleId) {
public R<List<Integer>> getPermissionIds(@PathVariable Integer roleId) {
return R.ok(sysPermissionService.findPermissionVOByRoleId(roleId).stream().map(PermissionVO::getId)
.collect(Collectors.toList()));
}
@@ -139,7 +149,7 @@ public class SysRoleController {
* @return 角色列表
*/
@GetMapping("/select")
public R<List<SelectData>> getSelectData() {
public R<List<SelectData<?>>> getSelectData() {
return R.ok(sysRoleService.getSelectData());
}

View File

@@ -67,7 +67,7 @@ public class SysUserController {
*/
@GetMapping("/select")
@PreAuthorize("@per.hasPermission('sys:sysuser:read')")
public R<List<SelectData>> getSelectData() {
public R<List<SelectData<?>>> getSelectData() {
return R.ok(sysUserService.getSelectData(null));
}
@@ -77,7 +77,7 @@ public class SysUserController {
*/
@GetMapping("/select/{userType}")
@PreAuthorize("@per.hasPermission('sys:sysuser:read')")
public R<List<SelectData>> getSysSelectData(@PathVariable Integer userType) {
public R<List<SelectData<?>>> getSysSelectData(@PathVariable Integer userType) {
return R.ok(sysUserService.getSelectData(userType));
}
@@ -90,7 +90,7 @@ public class SysUserController {
@ApiOperation(value = "新增系统用户", notes = "新增系统用户")
@CreateOperationLogging(msg = "新增系统用户")
@PreAuthorize("@per.hasPermission('sys:sysuser:add')")
public R addSysUser(@Valid @RequestBody SysUserDTO sysUserDto) {
public R<?> addSysUser(@Valid @RequestBody SysUserDTO sysUserDto) {
SysUser user = sysUserService.getByUsername(sysUserDto.getUsername());
if (user != null) {
@@ -109,21 +109,19 @@ public class SysUserController {
@ApiOperation(value = "修改系统用户", notes = "修改系统用户")
@UpdateOperationLogging(msg = "修改系统用户")
@PreAuthorize("@per.hasPermission('sys:sysuser:edit')")
public R updateUserInfo(@Valid @RequestBody SysUserDTO sysUserDto) {
public R<?> updateUserInfo(@Valid @RequestBody SysUserDTO sysUserDto) {
return sysUserService.updateSysUser(sysUserDto) ? R.ok()
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "修改系统用户失败");
}
/**
* 删除用户信息
* @param userId
* @return
*/
@DeleteMapping("/{userId}")
@ApiOperation(value = "通过id删除系统用户", notes = "通过id删除系统用户")
@DeleteOperationLogging(msg = "通过id删除系统用户")
@PreAuthorize("@per.hasPermission('sys:sysuser:del')")
public R deleteByUserId(@PathVariable Integer userId) {
public R<?> deleteByUserId(@PathVariable Integer userId) {
return sysUserService.deleteByUserId(userId) ? R.ok()
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "删除系统用户失败");
}
@@ -160,23 +158,19 @@ public class SysUserController {
@ApiOperation(value = "系统用户授权", notes = "系统用户授权")
@UpdateOperationLogging(msg = "系统用户授权")
@PreAuthorize("@per.hasPermission('sys:sysuser:grant')")
public R updateUserScope(@PathVariable Integer userId, @RequestBody SysUserScope sysUserScope) {
public R<?> updateUserScope(@PathVariable Integer userId, @RequestBody SysUserScope sysUserScope) {
return sysUserService.updateUserScope(userId, sysUserScope) ? R.ok()
: R.failed(BaseResultCode.UPDATE_DATABASE_ERROR, "系统用户授权失败");
}
/**
* 修改用户密码
* @param userId
* @param pass
* @param confirm
* @return
*/
@PutMapping("/pass/{userId}")
@ApiOperation(value = "修改系统用户密码", notes = "修改系统用户密码")
@UpdateOperationLogging(msg = "修改系统用户密码")
@PreAuthorize("@per.hasPermission('sys:sysuser:pass')")
public R updateUserPass(@PathVariable Integer userId, String pass, String confirm) {
public R<?> updateUserPass(@PathVariable Integer userId, String pass, String confirm) {
if (StrUtil.isBlank(pass) || StrUtil.isBlank(confirm) || !pass.equals(confirm)) {
return R.failed(SystemResultCode.BAD_REQUEST, "错误的密码!");
}
@@ -187,14 +181,12 @@ public class SysUserController {
/**
* 批量修改用户状态
* @param userIds
* @return
*/
@PutMapping("/status")
@ApiOperation(value = "批量修改用户状态", notes = "批量修改用户状态")
@UpdateOperationLogging(msg = "批量修改用户状态")
@PreAuthorize("@per.hasPermission('sys:sysuser:edit')")
public R updateUserStatus(@NotEmpty(message = "用户ID不能为空") @RequestBody List<Integer> userIds,
public R<?> updateUserStatus(@NotEmpty(message = "用户ID不能为空") @RequestBody List<Integer> userIds,
@NotNull(message = "用户状态不能为空") @RequestParam Integer status) {
if (!SysUserConst.Status.NORMAL.getValue().equals(status)

View File

@@ -11,7 +11,7 @@ import java.util.List;
* Mapper 接口
* </p>
*
* @author
* @author ballcat
* @since 2017-10-29
*/
public interface SysRoleMapper extends BaseMapper<SysRole> {
@@ -20,6 +20,6 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
* 获取角色下拉框数据
* @return
*/
List<SelectData> getSelectData();
List<SelectData<?>> getSelectData();
}

View File

@@ -23,8 +23,9 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
/**
* 返回用户的select数据 name=> username value => userId
* @param type
* @return List<SelectData>
*/
List<SelectData> getSelectData(@Param("type") Integer type);
List<SelectData<?>> getSelectData(@Param("type") Integer type);
}

View File

@@ -15,7 +15,7 @@ import java.time.LocalDateTime;
* 角色表
* </p>
*
* @author
* @author ballcat
* @since 2017-10-29
*/
@Data
@@ -41,6 +41,9 @@ public class SysRole extends Model<SysRole> {
@ApiModelProperty(value = "角色备注")
private String note;
@ApiModelProperty("角色是否为系统角色")
private boolean system;
/**
* 逻辑删除标识,已删除:0未删除删除时间戳
*/

View File

@@ -0,0 +1,20 @@
package com.hccake.ballcat.admin.modules.sys.service;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
/**
* 超级管理员账户规则配置
*
* @author lingting 2020-06-24 21:00:15
*/
public interface SysAdminConfigService {
/**
* 校验用户是否为超级管理员
* @param user 用户信息
* @return boolean
* @author lingting 2020-06-24 21:07:33
*/
boolean verify(SysUser user);
}

View File

@@ -37,6 +37,6 @@ public interface SysRoleService extends IService<SysRole> {
* 角色的选择数据
* @return
*/
List<SelectData> getSelectData();
List<SelectData<?>> getSelectData();
}

View File

@@ -109,6 +109,6 @@ public interface SysUserService extends IService<SysUser> {
* @param type 为空时返回所有客户为1返回系统客户 name=> username value => userId
* @return List<SelectData>
*/
List<SelectData> getSelectData(Integer type);
List<SelectData<?>> getSelectData(Integer type);
}

View File

@@ -0,0 +1,28 @@
package com.hccake.ballcat.admin.modules.sys.service.impl;
import cn.hutool.core.util.StrUtil;
import com.hccake.ballcat.admin.modules.sys.config.AdminRuleConfig;
import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
import com.hccake.ballcat.admin.modules.sys.service.SysAdminConfigService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* 超级管理员账户规则配置
*
* @author lingting 2020-06-24 21:00:15
*/
@Service
@RequiredArgsConstructor
public class SysAdminConfigServiceImpl implements SysAdminConfigService {
private final AdminRuleConfig ruleConfig;
@Override
public boolean verify(SysUser user) {
if (ruleConfig.getId() == user.getUserId()) {
return true;
}
return StrUtil.isNotEmpty(ruleConfig.getUsername()) && ruleConfig.getUsername().equals(user.getUsername());
}
}

View File

@@ -23,7 +23,7 @@ import java.util.List;
* 服务实现类
* </p>
*
* @author
* @author ballcat
* @since 2017-10-29
*/
@Service
@@ -66,7 +66,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> impl
* @return
*/
@Override
public List<SelectData> getSelectData() {
public List<SelectData<?>> getSelectData() {
return baseMapper.getSelectData();
}

View File

@@ -1,6 +1,7 @@
package com.hccake.ballcat.admin.modules.sys.service.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
@@ -20,10 +21,8 @@ import com.hccake.ballcat.admin.modules.sys.model.entity.SysUser;
import com.hccake.ballcat.admin.modules.sys.model.qo.SysUserQO;
import com.hccake.ballcat.admin.modules.sys.model.vo.PermissionVO;
import com.hccake.ballcat.admin.modules.sys.model.vo.UserInfo;
import com.hccake.ballcat.admin.modules.sys.service.FileService;
import com.hccake.ballcat.admin.modules.sys.service.SysPermissionService;
import com.hccake.ballcat.admin.modules.sys.service.SysUserRoleService;
import com.hccake.ballcat.admin.modules.sys.service.SysUserService;
import com.hccake.ballcat.admin.modules.sys.service.*;
import com.hccake.ballcat.admin.oauth.util.SecurityUtils;
import com.hccake.ballcat.common.core.constant.GlobalConstants;
import com.hccake.ballcat.common.core.util.PasswordUtil;
import com.hccake.ballcat.common.core.vo.SelectData;
@@ -58,6 +57,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
private final SysUserRoleService sysUserRoleService;
private final SysAdminConfigService sysAdminConfigService;
private final SysRoleService sysRoleService;
@Value("${password.secret-key}")
private String secretKey;
@@ -99,7 +102,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
UserInfo userInfo = new UserInfo();
userInfo.setSysUser(sysUser);
// 设置角色列表 ID
List<SysRole> roleList = sysUserRoleService.getRoles(sysUser.getUserId());
List<SysRole> roleList;
if (sysAdminConfigService.verify(sysUser)) {
// 超级管理员拥有所有角色
roleList = sysRoleService.list();
}
else {
roleList = sysUserRoleService.getRoles(sysUser.getUserId());
}
List<Integer> roleIds = new ArrayList<>();
List<String> roles = new ArrayList<>();
@@ -148,6 +159,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
public boolean updateSysUser(SysUserDTO sysUserDTO) {
SysUser entity = SysUserConverter.INSTANCE.dtoToPo(sysUserDTO);
Assert.isFalse(verifyPermission(entity),"无修改权限!");
return SqlHelper.retBool(baseMapper.updateById(entity));
}
@@ -173,6 +185,10 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
*/
@Override
public boolean deleteByUserId(Integer userId) {
if (sysAdminConfigService.verify(getById(userId))) {
// 无法删除超级管理员
return false;
}
// TODO 缓存控制
return SqlHelper.retBool(baseMapper.deleteById(userId));
}
@@ -185,7 +201,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
*/
@Override
public boolean updateUserPass(Integer userId, String pass) {
Assert.isFalse(verifyPermission(getById(userId)),"无修改权限!");
String password = PasswordUtil.decodeAesAndEncodeBCrypt(pass, secretKey);
int res = baseMapper.update(null,
@@ -194,6 +210,19 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
return SqlHelper.retBool(res);
}
/**
* 判断指定用户是否为超级管理员 如果是,则判断指定用户与当前为同一个用户
* @return 指定用户不是超级管理员 返回 true , 如果指定用户时超级管理员 且 指定用户为当前登录用户 返回true
* @author lingting 2020-06-24 21:24:53
*/
private boolean verifyPermission(SysUser user) {
if (!sysAdminConfigService.verify(user)) {
return true;
}
// 要修改的用户是超级管理员, 但是修改人不是本人
return !SecurityUtils.getSysUserDetails().getUsername().equals(user.getUsername());
}
/**
* 批量修改用户状态
* @param userIds
@@ -201,6 +230,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
*/
@Override
public boolean updateUserStatus(List<Integer> userIds, Integer status) {
// 移除不是本人且是超级管理员用户
userIds.removeIf(id-> !verifyPermission(getById(id)));
return this.update(
Wrappers.<SysUser>lambdaUpdate().set(SysUser::getStatus, status).in(SysUser::getUserId, userIds));
}
@@ -208,6 +239,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
@Override
@Transactional(rollbackFor = Exception.class)
public String updateAvatar(MultipartFile file, Integer userId) throws IOException {
Assert.isFalse(verifyPermission(getById(userId)),"无修改权限!");
// 获取系统用户头像的文件名
String objectName = "sysuser/" + userId + "/avatar/" + LocalDate.now().format(DateTimeFormatter.BASIC_ISO_DATE)
+ StrUtil.SLASH + IdUtil.fastSimpleUUID() + StrUtil.DOT + FileUtil.extName(file.getOriginalFilename());
@@ -223,8 +255,8 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
/**
* 根据角色查询用户
* @return
* @param roleCode
* @return
*/
@Override
public List<SysUser> selectUsersByRoleCode(String roleCode) {
@@ -236,8 +268,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
* @return List<SelectData>
*/
@Override
public List<SelectData> getSelectData(Integer type) {
public List<SelectData<?>> getSelectData(Integer type) {
return baseMapper.getSelectData(type);
}

View File

@@ -1,2 +1,3 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.hccake.ballcat.admin.UpmsAutoConfiguration
com.hccake.ballcat.admin.UpmsAutoConfiguration,\
com.hccake.ballcat.admin.modules.sys.config.AdminRuleConfig