diff --git a/back/src/main/java/com/heeexy/example/controller/UserController.java b/back/src/main/java/com/heeexy/example/controller/UserController.java index 9ea2489..f0aae90 100644 --- a/back/src/main/java/com/heeexy/example/controller/UserController.java +++ b/back/src/main/java/com/heeexy/example/controller/UserController.java @@ -3,6 +3,7 @@ package com.heeexy.example.controller; import com.alibaba.fastjson.JSONObject; import com.heeexy.example.service.UserService; import com.heeexy.example.util.CommonUtil; +import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresPermissions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -46,9 +47,68 @@ public class UserController { return userService.updateUser(requestJson); } - @RequiresPermissions("user:update") + @RequiresPermissions(value = {"user:add", "user:update"}, logical = Logical.OR) @GetMapping("/getAllRoles") public JSONObject getAllRoles() { return userService.getAllRoles(); } + + /** + * 角色列表 + * + * @return + */ + @RequiresPermissions("role:list") + @GetMapping("/listRole") + public JSONObject listRole() { + return userService.listRole(); + } + + /** + * 查询所有权限, 给角色分配权限时调用 + * + * @return + */ + @RequiresPermissions("role:list") + @GetMapping("/listAllPermission") + public JSONObject listAllPermission() { + return userService.listAllPermission(); + } + + /** + * 新增角色 + * + * @return + */ + @RequiresPermissions("role:add") + @PostMapping("/addRole") + public JSONObject addRole(@RequestBody JSONObject requestJson) { + CommonUtil.hasAllRequired(requestJson, "roleName,permissions"); + return userService.addRole(requestJson); + } + + /** + * 修改角色 + * + * @return + */ + @RequiresPermissions("role:update") + @PostMapping("/updateRole") + public JSONObject updateRole(@RequestBody JSONObject requestJson) { + CommonUtil.hasAllRequired(requestJson, "roleId,roleName,permissions"); + return userService.updateRole(requestJson); + } + + /** + * 删除角色 + * + * @param requestJson + * @return + */ + @RequiresPermissions("role:delete") + @PostMapping("/deleteRole") + public JSONObject deleteRole(@RequestBody JSONObject requestJson) { + CommonUtil.hasAllRequired(requestJson, "roleId"); + return userService.deleteRole(requestJson); + } } diff --git a/back/src/main/java/com/heeexy/example/dao/UserDao.java b/back/src/main/java/com/heeexy/example/dao/UserDao.java index f93f7b9..a68e7ca 100644 --- a/back/src/main/java/com/heeexy/example/dao/UserDao.java +++ b/back/src/main/java/com/heeexy/example/dao/UserDao.java @@ -1,6 +1,7 @@ package com.heeexy.example.dao; import com.alibaba.fastjson.JSONObject; +import org.apache.ibatis.annotations.Param; import java.util.List; @@ -49,4 +50,76 @@ public interface UserDao { * @return */ int updateUser(JSONObject jsonObject); + /** + * 角色列表 + * + * @return + */ + List listRole(); + + /** + * 查询所有权限, 给角色分配权限时调用 + * + * @return + */ + List listAllPermission(); + + /** + * 新增角色 + * + * @param jsonObject + * @return + */ + int insertRole(JSONObject jsonObject); + + /** + * 批量插入角色的权限 + * + * @param roleId 角色ID + * @param permissions 权限 + * @return + */ + int insertRolePermission(@Param("roleId") String roleId, @Param("permissions") List permissions); + + /** + * 将角色曾经拥有而修改为不再拥有的权限 delete_status改为'2' + * + * @param roleId + * @param permissions + * @return + */ + int removeOldPermission(@Param("roleId") String roleId, @Param("permissions") List permissions); + + /** + * 修改角色名称 + * + * @param jsonObject + * @return + */ + int updateRoleName(JSONObject jsonObject); + + /** + * 查询某角色的全部数据 + * 在删除和修改角色时调用 + * + * @param jsonObject + * @return + */ + JSONObject getRoleAllInfo(JSONObject jsonObject); + + /** + * 删除角色 + * + * @param jsonObject + * @return + */ + int removeRole(JSONObject jsonObject); + + /** + * 删除本角色全部权限 + * + * @param jsonObject + * @return + */ + int removeRoleAllPermission(JSONObject jsonObject); } diff --git a/back/src/main/java/com/heeexy/example/service/UserService.java b/back/src/main/java/com/heeexy/example/service/UserService.java index 3a7a37d..457d2d6 100644 --- a/back/src/main/java/com/heeexy/example/service/UserService.java +++ b/back/src/main/java/com/heeexy/example/service/UserService.java @@ -43,10 +43,16 @@ public interface UserService { /** * 角色列表 * - * @param jsonObject * @return */ - JSONObject listRole(JSONObject jsonObject); + JSONObject listRole(); + + /** + * 查询所有权限, 给角色分配权限时调用 + * + * @return + */ + JSONObject listAllPermission(); /** * 添加角色 @@ -63,4 +69,12 @@ public interface UserService { * @return */ JSONObject updateRole(JSONObject jsonObject); + + /** + * 删除角色 + * + * @param jsonObject + * @return + */ + JSONObject deleteRole(JSONObject jsonObject); } diff --git a/back/src/main/java/com/heeexy/example/service/impl/UserServiceImpl.java b/back/src/main/java/com/heeexy/example/service/impl/UserServiceImpl.java index 08b00bb..188e5bd 100644 --- a/back/src/main/java/com/heeexy/example/service/impl/UserServiceImpl.java +++ b/back/src/main/java/com/heeexy/example/service/impl/UserServiceImpl.java @@ -4,10 +4,15 @@ import com.alibaba.fastjson.JSONObject; import com.heeexy.example.dao.UserDao; import com.heeexy.example.service.UserService; import com.heeexy.example.util.CommonUtil; +import com.heeexy.example.util.constants.ErrorEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.Collection; import java.util.List; +import java.util.Set; /** * @author: hxy @@ -72,12 +77,23 @@ public class UserServiceImpl implements UserService { /** * 角色列表 * - * @param jsonObject * @return */ @Override - public JSONObject listRole(JSONObject jsonObject) { - return null; + public JSONObject listRole() { + List roles = userDao.listRole(); + return CommonUtil.successPage(roles); + } + + /** + * 查询所有权限, 给角色分配权限时调用 + * + * @return + */ + @Override + public JSONObject listAllPermission() { + List permissions = userDao.listAllPermission(); + return CommonUtil.successPage(permissions); } /** @@ -86,9 +102,12 @@ public class UserServiceImpl implements UserService { * @param jsonObject * @return */ + @Transactional(rollbackFor = Exception.class) @Override public JSONObject addRole(JSONObject jsonObject) { - return null; + userDao.insertRole(jsonObject); + userDao.insertRolePermission(jsonObject.getString("roleId"), (List) jsonObject.get("permissions")); + return CommonUtil.successJson(); } /** @@ -97,8 +116,92 @@ public class UserServiceImpl implements UserService { * @param jsonObject * @return */ + @Transactional(rollbackFor = Exception.class) @Override public JSONObject updateRole(JSONObject jsonObject) { - return null; + String roleId = jsonObject.getString("roleId"); + System.out.println("jsonObject的值为:" + jsonObject); + List newPerms = (List) jsonObject.get("permissions"); + System.out.println("ids的值为:" + newPerms); + JSONObject roleInfo = userDao.getRoleAllInfo(jsonObject); + Set oldPerms = (Set) roleInfo.get("permissionIds"); + //修改角色名称 + dealRoleName(jsonObject, roleInfo); + //添加新权限 + saveNewPermission(roleId, newPerms, oldPerms); + //移除旧的不再拥有的权限 + removeOldPermission(roleId, newPerms, oldPerms); + return CommonUtil.successJson(); + } + + /** + * 修改角色名称 + * + * @param paramJson + * @param roleInfo + */ + private void dealRoleName(JSONObject paramJson, JSONObject roleInfo) { + String roleName = paramJson.getString("roleName"); + if (!roleName.equals(roleInfo.getString("roleName"))) { + userDao.updateRoleName(paramJson); + } + } + + /** + * 为角色添加新权限 + * + * @param newPerms + * @param oldPerms + */ + private void saveNewPermission(String roleId, Collection newPerms, Collection oldPerms) { + List waitInsert = new ArrayList<>(); + for (Integer newPerm : newPerms) { + if (!oldPerms.contains(newPerm)) { + waitInsert.add(newPerm); + } + } + System.out.println("waitInsert的值为:" + waitInsert); + if (waitInsert.size() > 0) { + userDao.insertRolePermission(roleId, waitInsert); + } + } + + /** + * 删除角色 旧的 不再拥有的权限 + * + * @param roleId + * @param newPerms + * @param oldPerms + */ + private void removeOldPermission(String roleId, Collection newPerms, Collection oldPerms) { + List waitRemove = new ArrayList<>(); + for (Integer oldPerm : oldPerms) { + if (!newPerms.contains(oldPerm)) { + waitRemove.add(oldPerm); + } + } + System.out.println("waitRemove的值为:" + waitRemove); + if (waitRemove.size() > 0) { + userDao.removeOldPermission(roleId, waitRemove); + } + } + + /** + * 删除角色 + * + * @param jsonObject + * @return + */ + @Transactional(rollbackFor = Exception.class) + @Override + public JSONObject deleteRole(JSONObject jsonObject) { + JSONObject roleInfo = userDao.getRoleAllInfo(jsonObject); + List users = (List) roleInfo.get("users"); + if (users != null && users.size() > 0) { + return CommonUtil.errorJson(ErrorEnum.E_10008); + } + userDao.removeRole(jsonObject); + userDao.removeRoleAllPermission(jsonObject); + return CommonUtil.successJson(); } } diff --git a/back/src/main/java/com/heeexy/example/util/constants/ErrorEnum.java b/back/src/main/java/com/heeexy/example/util/constants/ErrorEnum.java index 67dc6b0..a06290f 100644 --- a/back/src/main/java/com/heeexy/example/util/constants/ErrorEnum.java +++ b/back/src/main/java/com/heeexy/example/util/constants/ErrorEnum.java @@ -12,6 +12,7 @@ public enum ErrorEnum { E_500("500", "请求方式有误,请检查 GET/POST"), E_501("501", "请求路径不存在"), E_502("502", "权限不足"), + E_10008("10008", "角色删除失败,尚有用户属于此角色"), E_20011("20011", "登陆已过期,请重新登陆"), diff --git a/back/src/main/java/com/heeexy/example/util/model/One2Many.java b/back/src/main/java/com/heeexy/example/util/model/One2Many.java index f537458..ce4b0ef 100644 --- a/back/src/main/java/com/heeexy/example/util/model/One2Many.java +++ b/back/src/main/java/com/heeexy/example/util/model/One2Many.java @@ -2,6 +2,7 @@ package com.heeexy.example.util.model; import com.alibaba.fastjson.JSONObject; +import java.util.List; import java.util.Set; /** @@ -14,6 +15,51 @@ public class One2Many extends JSONObject { private Set roleList; private Set menuList; private Set permissionList; + private Set permissionIds; + private List picList; + private List menus; + private List users; + private List permissions; + + public Set getPermissionIds() { + return permissionIds; + } + + public void setPermissionIds(Set permissionIds) { + this.permissionIds = permissionIds; + } + + public List getPicList() { + return picList; + } + + public void setPicList(List picList) { + this.picList = picList; + } + + public List getMenus() { + return menus; + } + + public void setMenus(List menus) { + this.menus = menus; + } + + public List getUsers() { + return users; + } + + public void setUsers(List users) { + this.users = users; + } + + public List getPermissions() { + return permissions; + } + + public void setPermissions(List permissions) { + this.permissions = permissions; + } public Set getRoleList() { return roleList; diff --git a/back/src/main/resources/mapper/UserMapper.xml b/back/src/main/resources/mapper/UserMapper.xml index ed77351..9f598b9 100644 --- a/back/src/main/resources/mapper/UserMapper.xml +++ b/back/src/main/resources/mapper/UserMapper.xml @@ -26,8 +26,8 @@ + SELECT + r.id roleId, + r.role_name roleName, + u.id userId, + u.nickname nickname, + p.id permissionId, + p.menu_code menuCode, + p.menu_name menuName, + p.permission_name permissionName + FROM sys_role r + LEFT JOIN sys_user u ON r.id = u.role_id AND u.delete_status = '1' + LEFT JOIN sys_role_permission rp ON r.id = rp.role_id AND rp.delete_status = '1' + LEFT JOIN sys_permission p ON rp.permission_id = p.id + WHERE r.delete_status = '1' + ORDER BY r.id, p.id + + + + + + + + + + + + + INSERT INTO sys_role + (role_name) + VALUES (#{roleName}) + + + + insert into sys_role_permission (role_id, permission_id) + values + + (#{roleId}, #{item}) + + + + + + + + + + + + + + + + + + + UPDATE sys_role + SET + delete_status = '2' + WHERE id = #{roleId} + + + UPDATE sys_role_permission + SET + delete_status = '2' + WHERE role_id = #{roleId} + + + + UPDATE sys_role_permission + SET + delete_status = '2' + WHERE role_id = #{roleId} + AND permission_id in ( + + #{item} + + ) + + + UPDATE sys_role + SET + role_name = #{roleName} + WHERE id = #{roleId} + \ No newline at end of file diff --git a/vue/src/router/index.js b/vue/src/router/index.js index a421764..3ca14d7 100644 --- a/vue/src/router/index.js +++ b/vue/src/router/index.js @@ -50,6 +50,7 @@ export const asyncRouterMap = [ icon: '管理员', children: [ {path: '', component: _import('user/user'), name: '用户列表', menu: 'user'}, + {path: 'role', component: _import('user/role'), name: '权限管理', menu: 'role'}, ] }, {path: '*', redirect: '/404', hidden: true} diff --git a/vue/src/views/user/role.vue b/vue/src/views/user/role.vue new file mode 100644 index 0000000..58f8c2a --- /dev/null +++ b/vue/src/views/user/role.vue @@ -0,0 +1,336 @@ + + + diff --git a/vue/src/views/user/user.vue b/vue/src/views/user/user.vue index 7830360..dd1f6c3 100644 --- a/vue/src/views/user/user.vue +++ b/vue/src/views/user/user.vue @@ -112,7 +112,9 @@ }, created() { this.getList(); - this.getAllRoles(); + if (this.hasPerm('user:add') || this.hasPerm('user:update')) { + this.getAllRoles(); + } }, computed: { ...mapGetters([ @@ -178,7 +180,6 @@ this.dialogStatus = "update" this.dialogFormVisible = true }, - createUser() { //添加新用户 this.api({