Selaa lähdekoodia

7.25 一级电子市场 - PC端 - APP菜单权限
- 可以根据不同app角色进行菜单权限分配

Mechrevo 2 vuotta sitten
vanhempi
commit
367229d07c

+ 37 - 0
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/MethodRoleMenuService.java

@@ -0,0 +1,37 @@
+package com.pj.project.re_role_menu;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+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.List;
+
+/**
+ * @Author Mechrevo
+ * @Date 2023 07 25 17 30
+ **/
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class MethodRoleMenuService {
+
+    @Autowired
+    private ReRoleMenuMapper reRoleMenuMapper;
+
+    /** 获取该权限的集合 */
+    public List<Long> getPerList(Long roleId){
+        if (roleId == null)throw new RuntimeException("职务不能为空!");
+        //查询该职务下属权限
+        List<ReRoleMenu> reRoleMenus = reRoleMenuMapper.selectList
+                (new LambdaQueryWrapper<ReRoleMenu>().eq(ReRoleMenu::getAppRoleId, roleId));
+        //创建返回值集合
+        List<Long> perList = new ArrayList<>();
+        //遍历集合封装数据
+        reRoleMenus.forEach(item -> {
+            perList.add(item.getId());
+        });
+        return perList;
+    }
+
+}

+ 9 - 2
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenu.java

@@ -3,9 +3,11 @@ package com.pj.project.re_role_menu;
 import java.io.Serializable;
 import com.baomidou.mybatisplus.annotation.*;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.AllArgsConstructor;
 import lombok.EqualsAndHashCode;
 
 import lombok.Data;
+import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
 
 /**
@@ -16,6 +18,8 @@ import lombok.experimental.Accessors;
 @Accessors(chain = true)
 @TableName(ReRoleMenu.TABLE_NAME)
 @EqualsAndHashCode(callSuper = false)
+@AllArgsConstructor
+@NoArgsConstructor
 public class ReRoleMenu extends Model<ReRoleMenu> implements Serializable {
 
 	// ---------- 模块常量 ----------
@@ -35,10 +39,13 @@ public class ReRoleMenu extends Model<ReRoleMenu> implements Serializable {
 	public static final String PERMISSION_CODE_EDIT = "re-role-menu-edit";
 	public static final String PERMISSION_CODE_DEL = "re-role-menu-del";
 
+	public ReRoleMenu(Long appRoleId, Long appMenuId) {
+		this.appRoleId = appRoleId;
+		this.appMenuId = appMenuId;
+	}
 
 
-
-	// ---------- 表中字段 ----------
+// ---------- 表中字段 ----------
 	/**
 	 * 主键 
 	 */

+ 17 - 1
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuController.java

@@ -1,9 +1,12 @@
 package com.pj.project.re_role_menu;
 
 import java.util.List;
+
+import com.pj.project.re_role_menu.dto.AssignPermissionsDto;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import com.pj.utils.sg.*;
@@ -80,7 +83,20 @@ public class ReRoleMenuController {
 		return AjaxJson.getPageData(so.getDataCount(), list);
 	}
 	
-	
+	/**
+	 * 查集合 - 根据条件(参数为空时代表忽略指定条件)
+	 * @param assignPermissionsDto 职务ID和该职务下属的权限的集合
+	 * @return
+	 */
+	@RequestMapping("assignPermissions")
+		@SaCheckPermission(ReRoleMenu.PERMISSION_CODE)
+	public AjaxJson assignPermissions(@Validated @RequestBody AssignPermissionsDto assignPermissionsDto) {
+		boolean permissions = reRoleMenuService.assignPermissions(assignPermissionsDto);
+		if(permissions)return AjaxJson.getSuccess("权限分配成功!");
+		return AjaxJson.getError("权限分配失败!");
+	}
+
+
 	
 	
 

+ 39 - 1
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/ReRoleMenuService.java

@@ -1,13 +1,17 @@
 package com.pj.project.re_role_menu;
 
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.pj.project.re_role_menu.dto.AssignPermissionsDto;
 import com.pj.utils.so.SoMap;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.transaction.annotation.Transactional;
-import com.pj.utils.sg.*;
 
 /**
  * Service: re_role_menu -- app用户菜单中间表
@@ -20,6 +24,9 @@ public class ReRoleMenuService extends ServiceImpl<ReRoleMenuMapper, ReRoleMenu>
 	/** 底层 Mapper 对象 */
 	@Autowired
 	ReRoleMenuMapper reRoleMenuMapper;
+	/** 方法抽取,优化代码 */
+	@Autowired
+	private MethodRoleMenuService methodRoleMenuService;
 
 	/** 增 */
 	void add(ReRoleMenu r){
@@ -47,6 +54,37 @@ public class ReRoleMenuService extends ServiceImpl<ReRoleMenuMapper, ReRoleMenu>
 		so.set("app_role_id",appRoleId);
 		return reRoleMenuMapper.getList(so);	
 	}
+
+	/** 给app角色分配权限 */
+	boolean assignPermissions(AssignPermissionsDto assignPermissionsDto){
+		//取出数据
+		Long roleId = assignPermissionsDto.getRoleId();
+		List<Long> permissionsDtoList = assignPermissionsDto.getList().stream().distinct().collect(Collectors.toList());
+		//情况1:传进来的集合为空,默认删除该职务下属的所有权限
+		if(permissionsDtoList.size() == 0){
+			//删除所有权限
+			List<Long> perList = methodRoleMenuService.getPerList(roleId);
+			//清除
+			int i = reRoleMenuMapper.deleteBatchIds(perList);
+			return i == perList.size();
+		}
+		//情况2: 传进来的集合不为空
+		//2.1 先清除该职务的权限
+		List<Long> perList = methodRoleMenuService.getPerList(roleId);
+		//执行清除
+		int i = reRoleMenuMapper.deleteBatchIds(perList);
+		if(i != perList.size())throw new RuntimeException("权限分配失败Ⅰ!");
+		//2.2 再添加新的权限给到该职务
+		//定义计数器
+		int count = 0;
+		for(Long item : permissionsDtoList){
+			int insert = reRoleMenuMapper.insert(new ReRoleMenu(roleId, item));
+			count += insert;
+		}
+		if(count != permissionsDtoList.size())throw new RuntimeException("权限分配失败Ⅱ!");
+
+		return count == permissionsDtoList.size();
+	}
 	
 
 }

+ 20 - 0
sp-service/sp-admin/src/main/java/com/pj/project/re_role_menu/dto/AssignPermissionsDto.java

@@ -0,0 +1,20 @@
+package com.pj.project.re_role_menu.dto;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @Author Mechrevo
+ * @Date 2023 07 25 17 11
+ **/
+@Data
+public class AssignPermissionsDto {
+
+    @NotNull(message = "职务ID")
+    private Long roleId;
+
+    private List<Long> list;
+
+}