Browse Source

权限用户基本功能完善

zhangyang 2 years ago
parent
commit
054f278810

+ 91 - 14
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/PoUserController.java

@@ -1,19 +1,28 @@
 package com.ruoyi.web.controller.system;
 package com.ruoyi.web.controller.system;
 
 
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.annotation.Log;
+import com.ruoyi.common.constant.UserConstants;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.system.domain.PoUser;
 import com.ruoyi.system.domain.PoUser;
 import com.ruoyi.system.service.IPoUserService;
 import com.ruoyi.system.service.IPoUserService;
+import org.apache.catalina.User;
+import org.apache.commons.lang3.ArrayUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 被分配用户Controller
  * 被分配用户Controller
@@ -22,7 +31,7 @@ import java.util.List;
  * @date 2023-01-17
  * @date 2023-01-17
  */
  */
 @RestController
 @RestController
-@RequestMapping("/po/user")
+@RequestMapping("/system/user")
 public class PoUserController extends BaseController
 public class PoUserController extends BaseController
 {
 {
     @Autowired
     @Autowired
@@ -31,7 +40,7 @@ public class PoUserController extends BaseController
     /**
     /**
      * 查询用户列表
      * 查询用户列表
      */
      */
-    @PreAuthorize("@ss.hasPermi('post:user:list')")
+    @PreAuthorize("@ss.hasPermi('system:user:list')")
     @GetMapping("/list")
     @GetMapping("/list")
     public TableDataInfo list(PoUser poUser)
     public TableDataInfo list(PoUser poUser)
     {
     {
@@ -43,7 +52,7 @@ public class PoUserController extends BaseController
     /**
     /**
      * 导出用户列表
      * 导出用户列表
      */
      */
-    @PreAuthorize("@ss.hasPermi('post:user:export')")
+    @PreAuthorize("@ss.hasPermi('system:user:export')")
     @Log(title = "被分配权限的用户", businessType = BusinessType.EXPORT)
     @Log(title = "被分配权限的用户", businessType = BusinessType.EXPORT)
     @PostMapping("/export")
     @PostMapping("/export")
     public void export(HttpServletResponse response, PoUser poUser)
     public void export(HttpServletResponse response, PoUser poUser)
@@ -54,46 +63,114 @@ public class PoUserController extends BaseController
     }
     }
 
 
     /**
     /**
-     * 获取用户有权限查到的详细信息
+     * 根据用户编号获取详细信息
      */
      */
-    @PreAuthorize("@ss.hasPermi('post:user:query')")
-    @GetMapping(value = "/{userId}")
-    public AjaxResult getInfo(@PathVariable("userId") String userId)
+    @PreAuthorize("@ss.hasPermi('system:user:query')")
+    @GetMapping(value = { "/", "/{userId}" })
+    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
     {
     {
-        return success(poUserService.selectPoUserByUserId(userId));
+        poUserService.checkUserDataScope(userId);
+        AjaxResult ajax = AjaxResult.success();
+        if (StringUtils.isNotNull(userId))
+        {
+            PoUser poUser = poUserService.selectPoUserByUserId(userId);
+            ajax.put(AjaxResult.DATA_TAG, poUser);
+        }
+        return ajax;
     }
     }
 
 
     /**
     /**
      * 新增分配权限用户
      * 新增分配权限用户
      */
      */
-    @PreAuthorize("@ss.hasPermi('post:user:add')")
+    @PreAuthorize("@ss.hasPermi('system:user:add')")
     @Log(title = "获得权限用户", businessType = BusinessType.INSERT)
     @Log(title = "获得权限用户", businessType = BusinessType.INSERT)
     @PostMapping("/add")
     @PostMapping("/add")
-    public AjaxResult add(@RequestBody PoUser poUser)
+    public AjaxResult add(@Validated  @RequestBody PoUser poUser)
     {
     {
+        if(UserConstants.NOT_UNIQUE.equals(poUserService.checkUserNameUnique(poUser))){
+            return error("新增用户"+poUser.getUserName()+"失败,用户账号已经存在");
+        } else if (StringUtils.isNotEmpty(poUser.getPhonenumber())&& UserConstants.NOT_UNIQUE.equals(poUserService.checkPhoneUnique(poUser))) {
+            return error("新增用户"+poUser.getPhonenumber()+"失败,用户手机号已经存在");
+        }else if(StringUtils.isNotEmpty(poUser.getEmail()) && UserConstants.NOT_UNIQUE.equals(poUserService.checkEmailUnique(poUser))){
+            return error("新增用户"+poUser.getEmail()+"失败,用户邮箱账号已经存在");
+        }
+        poUser.setCreateBy(getUsername());
+        poUser.setPassword(SecurityUtils.encryptPassword(poUser.getPassword()));
         return toAjax(poUserService.insertPoUser(poUser));
         return toAjax(poUserService.insertPoUser(poUser));
     }
     }
 
 
     /**
     /**
      * 修改用户
      * 修改用户
      */
      */
-    @PreAuthorize("@ss.hasPermi('post:user:edit')")
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
     @Log(title = "修改权限用户", businessType = BusinessType.UPDATE)
     @Log(title = "修改权限用户", businessType = BusinessType.UPDATE)
     @PutMapping("/edit")
     @PutMapping("/edit")
-    public AjaxResult edit(@RequestBody PoUser poUser)
+    public AjaxResult edit( @Validated @RequestBody PoUser poUser)
     {
     {
+
+        poUserService.checkUserAllowed(poUser);
+
+        poUserService.checkUserDataScope(poUser.getUserId());
+        if (UserConstants.NOT_UNIQUE.equals(poUserService.checkUserNameUnique(poUser)))
+        {
+            return error("修改用户'" + poUser.getUserName() + "'失败,登录账号已存在");
+        }
+        else if (StringUtils.isNotEmpty(poUser.getPhonenumber())
+                && UserConstants.NOT_UNIQUE.equals(poUserService.checkPhoneUnique(poUser)))
+        {
+            return error("修改用户'" + poUser.getUserName() + "'失败,手机号码已存在");
+        }
+        else if (StringUtils.isNotEmpty(poUser.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(poUserService.checkEmailUnique(poUser)))
+        {
+            return error("修改用户'" + poUser.getUserName() + "'失败,邮箱账号已存在");
+        }
         return toAjax(poUserService.updatePoUser(poUser));
         return toAjax(poUserService.updatePoUser(poUser));
     }
     }
 
 
     /**
     /**
      * 删除用户
      * 删除用户
      */
      */
-    @PreAuthorize("@ss.hasPermi('po:user:remove')")
+    @PreAuthorize("@ss.hasPermi('system:user:remove')")
     @Log(title = "删除权限用户", businessType = BusinessType.DELETE)
     @Log(title = "删除权限用户", businessType = BusinessType.DELETE)
     @DeleteMapping("/{userIds}")
     @DeleteMapping("/{userIds}")
-    public AjaxResult remove(@PathVariable String[] userIds)
+    public AjaxResult remove(@PathVariable Long[] userIds)
     {
     {
+        if (ArrayUtils.contains(userIds, getUserId()))
+        {
+            return error("当前用户不能删除");
+        }
+
         return toAjax(poUserService.deletePoUserByUserIds(userIds));
         return toAjax(poUserService.deletePoUserByUserIds(userIds));
     }
     }
+    /**
+     * 重置密码
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/resetPwd")
+    public AjaxResult resetPwd(@RequestBody PoUser poUser)
+    {
+        //检验是否有操作权限
+        poUserService.checkUserAllowed(poUser);
+        //检验是否有访问数据权限
+        poUserService.checkUserDataScope(poUser.getUserId());
+        poUser.setPassword(SecurityUtils.encryptPassword(poUser.getPassword()));
+        poUser.setUpdateBy(getUsername());
+        return toAjax(poUserService.resetPwd(poUser));
+    }
+    /**
+     * 状态修改
+     */
+    @PreAuthorize("@ss.hasPermi('system:user:edit')")
+    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
+    @PutMapping("/changeStatus")
+    public AjaxResult changeStatus(@RequestBody PoUser poUser)
+    {
+        poUserService.checkUserAllowed(poUser);
+        poUserService.checkUserDataScope(poUser.getUserId());
+        poUser.setUpdateBy(getUsername());
+        return toAjax(poUserService.updateUserStatus(poUser));
+    }
 }
 }
 
 

+ 16 - 6
ruoyi-system/src/main/java/com/ruoyi/system/domain/PoUser.java

@@ -19,11 +19,11 @@ public class PoUser extends BaseEntity
     private static final long serialVersionUID = 1L;
     private static final long serialVersionUID = 1L;
 
 
     /** 用户Id */
     /** 用户Id */
-    private String userId;
+    private Long userId;
 
 
     /** 部门id */
     /** 部门id */
     @Excel(name = "部门id")
     @Excel(name = "部门id")
-    private String deptId;
+    private Long deptId;
 
 
     /** 用户账号 */
     /** 用户账号 */
     @Excel(name = "用户账号")
     @Excel(name = "用户账号")
@@ -73,21 +73,31 @@ public class PoUser extends BaseEntity
     @Excel(name = "最后登陆时间", width = 30, dateFormat = "yyyy-MM-dd")
     @Excel(name = "最后登陆时间", width = 30, dateFormat = "yyyy-MM-dd")
     private Date loginDate;
     private Date loginDate;
 
 
-    public void setUserId(String userId)
+
+    public boolean isAdmin()
+    {
+        return isAdmin(this.userId);
+    }
+
+    public static boolean isAdmin(Long userId)
+    {
+        return userId != null && 1L == userId;
+    }
+    public void setUserId(Long userId)
     {
     {
         this.userId = userId;
         this.userId = userId;
     }
     }
 
 
-    public String getUserId()
+    public Long getUserId()
     {
     {
         return userId;
         return userId;
     }
     }
-    public void setDeptId(String deptId)
+    public void setDeptId(Long deptId)
     {
     {
         this.deptId = deptId;
         this.deptId = deptId;
     }
     }
 
 
-    public String getDeptId()
+    public Long getDeptId()
     {
     {
         return deptId;
         return deptId;
     }
     }

+ 24 - 3
ruoyi-system/src/main/java/com/ruoyi/system/mapper/PoUserMapper.java

@@ -18,7 +18,7 @@ public interface PoUserMapper
      * @param userId 用户主键
      * @param userId 用户主键
      * @return 用户
      * @return 用户
      */
      */
-    public PoUser selectPoUserByUserId(String userId);
+    public PoUser selectPoUserByUserId(Long userId);
 
 
     /**
     /**
      * 查询用户列表
      * 查询用户列表
@@ -50,7 +50,7 @@ public interface PoUserMapper
      * @param userId 用户主键
      * @param userId 用户主键
      * @return 结果
      * @return 结果
      */
      */
-    public int deletePoUserByUserId(String userId);
+    public int deletePoUserByUserId(Long userId);
 
 
     /**
     /**
      * 批量删除用户
      * 批量删除用户
@@ -58,5 +58,26 @@ public interface PoUserMapper
      * @param userIds 需要删除的数据主键集合
      * @param userIds 需要删除的数据主键集合
      * @return 结果
      * @return 结果
      */
      */
-    public int deletePoUserByUserIds(String[] userIds);
+    public int deletePoUserByUserIds(Long[] userIds);
+
+    /**
+     * 检验用户账号是否存在
+     * @param poUser
+     * @return
+     */
+    String checkUserNameUnique(PoUser poUser);
+
+    /**
+     * 检验用户手机号是否存在
+     * @param poUser
+     * @return
+     */
+    String checkPhoneUnique(PoUser poUser);
+
+    /**
+     * 检验邮箱是否存在
+     * @param poUser
+     * @return
+     */
+    String checkEmailUnique(PoUser poUser);
 }
 }

+ 50 - 3
ruoyi-system/src/main/java/com/ruoyi/system/service/IPoUserService.java

@@ -18,7 +18,7 @@ public interface IPoUserService
      * @param userId 用户主键
      * @param userId 用户主键
      * @return 用户
      * @return 用户
      */
      */
-    public PoUser selectPoUserByUserId(String userId);
+    public PoUser selectPoUserByUserId(Long userId);
 
 
     /**
     /**
      * 查询用户列表
      * 查询用户列表
@@ -50,7 +50,7 @@ public interface IPoUserService
      * @param userIds 需要删除的用户主键集合
      * @param userIds 需要删除的用户主键集合
      * @return 结果
      * @return 结果
      */
      */
-    public int deletePoUserByUserIds(String[] userIds);
+    public int deletePoUserByUserIds(Long[] userIds);
 
 
     /**
     /**
      * 删除用户信息
      * 删除用户信息
@@ -58,5 +58,52 @@ public interface IPoUserService
      * @param userId 用户主键
      * @param userId 用户主键
      * @return 结果
      * @return 结果
      */
      */
-    public int deletePoUserByUserId(String userId);
+    public int deletePoUserByUserId(Long userId);
+
+    /**
+     * 检验用户账号是否存在
+     * @param poUser
+     * @return
+     */
+    String checkUserNameUnique(PoUser poUser);
+
+    /**
+     * 检验用户手机号是否存在
+     * @param poUser
+     * @return
+     */
+    String checkPhoneUnique(PoUser poUser);
+
+    /**
+     * 检验邮箱是否存在
+     * @param poUser
+     * @return
+     */
+    String checkEmailUnique(PoUser poUser);
+
+    /**
+     * 检验当前用户是否可以操作
+     * @param poUser
+     */
+    void checkUserAllowed(PoUser poUser);
+
+    /**
+     * 检验用户是否有访问数据的权限
+     * @param userId
+     */
+    void checkUserDataScope(Long userId);
+
+    /**
+     * 重置密码
+     * @param poUser
+     * @return
+     */
+    int resetPwd(PoUser poUser);
+
+    /**
+     * 状态修改
+     * @param poUser
+     * @return
+     */
+    int updateUserStatus(PoUser poUser);
 }
 }

+ 99 - 14
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/PoUserServiceImpl.java

@@ -1,6 +1,10 @@
 package com.ruoyi.system.service.impl;
 package com.ruoyi.system.service.impl;
 
 
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.system.domain.PoUser;
 import com.ruoyi.system.domain.PoUser;
 import com.ruoyi.system.mapper.PoUserMapper;
 import com.ruoyi.system.mapper.PoUserMapper;
 import com.ruoyi.system.service.IPoUserService;
 import com.ruoyi.system.service.IPoUserService;
@@ -16,8 +20,7 @@ import java.util.List;
  * @date 2023-01-17
  * @date 2023-01-17
  */
  */
 @Service
 @Service
-public class PoUserServiceImpl implements IPoUserService
-{
+public class PoUserServiceImpl implements IPoUserService {
     @Autowired
     @Autowired
     private PoUserMapper poUserMapper;
     private PoUserMapper poUserMapper;
 
 
@@ -28,8 +31,7 @@ public class PoUserServiceImpl implements IPoUserService
      * @return 用户
      * @return 用户
      */
      */
     @Override
     @Override
-    public PoUser selectPoUserByUserId(String userId)
-    {
+    public PoUser selectPoUserByUserId(Long userId) {
         return poUserMapper.selectPoUserByUserId(userId);
         return poUserMapper.selectPoUserByUserId(userId);
     }
     }
 
 
@@ -40,8 +42,7 @@ public class PoUserServiceImpl implements IPoUserService
      * @return 用户
      * @return 用户
      */
      */
     @Override
     @Override
-    public List<PoUser> selectPoUserList(PoUser poUser)
-    {
+    public List<PoUser> selectPoUserList(PoUser poUser) {
         return poUserMapper.selectPoUserList(poUser);
         return poUserMapper.selectPoUserList(poUser);
     }
     }
 
 
@@ -52,8 +53,7 @@ public class PoUserServiceImpl implements IPoUserService
      * @return 结果
      * @return 结果
      */
      */
     @Override
     @Override
-    public int insertPoUser(PoUser poUser)
-    {
+    public int insertPoUser(PoUser poUser) {
         poUser.setCreateTime(DateUtils.getNowDate());
         poUser.setCreateTime(DateUtils.getNowDate());
         return poUserMapper.insertPoUser(poUser);
         return poUserMapper.insertPoUser(poUser);
     }
     }
@@ -65,8 +65,7 @@ public class PoUserServiceImpl implements IPoUserService
      * @return 结果
      * @return 结果
      */
      */
     @Override
     @Override
-    public int updatePoUser(PoUser poUser)
-    {
+    public int updatePoUser(PoUser poUser) {
         poUser.setUpdateTime(DateUtils.getNowDate());
         poUser.setUpdateTime(DateUtils.getNowDate());
         return poUserMapper.updatePoUser(poUser);
         return poUserMapper.updatePoUser(poUser);
     }
     }
@@ -78,8 +77,7 @@ public class PoUserServiceImpl implements IPoUserService
      * @return 结果
      * @return 结果
      */
      */
     @Override
     @Override
-    public int deletePoUserByUserIds(String[] userIds)
-    {
+    public int deletePoUserByUserIds(Long[] userIds) {
         return poUserMapper.deletePoUserByUserIds(userIds);
         return poUserMapper.deletePoUserByUserIds(userIds);
     }
     }
 
 
@@ -90,8 +88,95 @@ public class PoUserServiceImpl implements IPoUserService
      * @return 结果
      * @return 结果
      */
      */
     @Override
     @Override
-    public int deletePoUserByUserId(String userId)
-    {
+    public int deletePoUserByUserId(Long userId) {
         return poUserMapper.deletePoUserByUserId(userId);
         return poUserMapper.deletePoUserByUserId(userId);
     }
     }
+
+    /**
+     * 检验用户账号是否存在
+     *
+     * @param poUser
+     * @return
+     */
+    @Override
+    public String checkUserNameUnique(PoUser poUser) {
+
+        return poUserMapper.checkUserNameUnique(poUser);
+    }
+
+    /**
+     * 检验用户手机号是否存在
+     *
+     * @param poUser
+     * @return
+     */
+    @Override
+    public String checkPhoneUnique(PoUser poUser) {
+
+        return poUserMapper.checkPhoneUnique(poUser);
+    }
+
+    /**
+     * 检验邮箱是否存在
+     *
+     * @param poUser
+     * @return
+     */
+    @Override
+    public String checkEmailUnique(PoUser poUser) {
+
+        return poUserMapper.checkEmailUnique(poUser);
+    }
+
+    /**
+     * 检验用户是否有操作权限
+     *
+     * @param poUser
+     */
+    @Override
+    public void checkUserAllowed(PoUser poUser) {
+        if (StringUtils.isNotNull(poUser.getUserId()) && poUser.isAdmin()) {
+            throw new ServiceException("不允许操作超级管理员用户");
+        }
+
+    }
+
+    /**
+     * 检验用户是否有数据权限
+     *
+     * @param userId
+     */
+    @Override
+    public void checkUserDataScope(Long userId) {
+        {
+            if (!PoUser.isAdmin(SecurityUtils.getUserId())) {
+                PoUser poUser = new PoUser();
+                poUser.setUserId(userId);
+                List<PoUser> poUsers = SpringUtils.getAopProxy(this).selectPoUserList(poUser);
+                if (StringUtils.isEmpty(poUsers)) {
+                    throw new ServiceException("没有权限访问用户数据!");
+                }
+            }
+        }
+    }
+
+    /**
+     * 重置密码
+     * @param poUser
+     * @return
+     */
+    @Override
+    public int resetPwd(PoUser poUser) {
+        return poUserMapper.updatePoUser(poUser);
+    }
+
+    /**
+     * 状态修改
+     * @param poUser
+     * @return
+     */
+    @Override
+    public int updateUserStatus(PoUser poUser) {
+        return poUserMapper.updatePoUser(poUser);
+    }
 }
 }

+ 12 - 0
ruoyi-system/src/main/resources/mapper/system/PoUserMapper.xml

@@ -53,6 +53,18 @@
         where user_id = #{userId}
         where user_id = #{userId}
     </select>
     </select>
 
 
+    <select id="checkUserNameUnique" parameterType="String" resultMap="PoUserResult">
+        select user_id, user_name from po_user where user_name = #{userName} and del_flag = '0' limit 1
+    </select>
+
+    <select id="checkPhoneUnique" parameterType="String" resultMap="PoUserResult">
+        select user_id, phonenumber from po_user where phonenumber = #{phonenumber} and del_flag = '0' limit 1
+    </select>
+
+    <select id="checkEmailUnique" parameterType="String" resultMap="PoUserResult">
+        select user_id, email from po_user where email = #{email} and del_flag = '0' limit 1
+    </select>
+
     <insert id="insertPoUser" parameterType="PoUser">
     <insert id="insertPoUser" parameterType="PoUser">
         insert into po_user
         insert into po_user
         <trim prefix="(" suffix=")" suffixOverrides=",">
         <trim prefix="(" suffix=")" suffixOverrides=",">