Forráskód Böngészése

主页选井树调整为按数据权限过滤

chenwen 2 éve
szülő
commit
9936475712

+ 17 - 23
src/main/java/com/hb/proj/auth/controller/AuthController.java

@@ -11,6 +11,9 @@ import org.springframework.web.bind.annotation.RestController;
 
 import com.hb.proj.allconfig.AccessToken;
 import com.hb.proj.auth.service.AuthService;
+import com.hb.proj.base.service.WellService;
+import com.hb.proj.model.SideTreeNode;
+import com.hb.proj.sys.service.OrgService;
 import com.hb.proj.utils.RespVO;
 import com.hb.proj.utils.RespVOBuilder;
 
@@ -31,6 +34,12 @@ public class AuthController {
 	@Autowired
 	private AuthService service;
 	
+	@Autowired
+	private OrgService  orgService;
+	
+	@Autowired
+	private WellService  wellService;
+	
 	/**
 	 * 加载当前登录人的导航菜单
 	 * @param token  登录人token 
@@ -45,35 +54,20 @@ public class AuthController {
 		
 	}
 	
-	
 	/**
-	 * 可分配的权限节点(菜单,功能点暂时不需要)
-	 * @param response
+	 * 加载所有数据权限节点-用于数据权限分配树
+	 * @return
 	 */
-	@RequestMapping("/loadAuthNodes")
-	public RespVO<Object> loadAuthNodes(){
-		List<Map<String,Object>> nodes=service.loadAllMenuNodes();
-		if(nodes==null||nodes.size()==0){
-			return RespVOBuilder.error("未找到数据");
-			
+	@RequestMapping("/loadDataAuthTree")
+	public RespVO<List<SideTreeNode>> loadDataAuthNodes() {
+		List<SideTreeNode> nodes=orgService.loadWholeOrgTree();
+		List<SideTreeNode> wnodes=wellService.loadAllWellNodes();
+		if(nodes!=null&&wnodes!=null&&wnodes.size()>0) {
+			nodes.addAll(wnodes);
 		}
 		return RespVOBuilder.ok(nodes);
 	}
-	
-	@RequestMapping("/loadUsAuth")
-	public RespVO<Object> loadUsAuth(@NotBlank(message = "缺少用户信息") String userId){
 		
-		return RespVOBuilder.ok(service.loadUserAuth(userId));
-	}
-	
-	
-	@RequestMapping("/save")
-	public RespVO<Object> save(@NotBlank(message = "缺少用户信息") String userId,@NotBlank(message = "缺少已分配数据") String authIds){
-		
-		service.saveUserAuth(userId, authIds);
-		return RespVOBuilder.ok();
-	}
-	
 	
 	/**
 	 * 加载指定角色的菜单权限、数据权限

+ 13 - 3
src/main/java/com/hb/proj/base/controller/StationController.java

@@ -1,6 +1,7 @@
 package com.hb.proj.base.controller;
 
 import java.util.List;
+import java.util.Set;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -46,13 +47,22 @@ public class StationController {
 		if(StringUtils.isBlank(id)) {
 			id="0";
 		}
+		
 		List<SideTreeNode> nodes=null;
 		if(SideTreeNode.ORG_NODE.equals(nodeType)&&typeEnd) {
-			nodes=wellService.loadSideTreeSubNodes(id);
+			nodes=wellService.loadSideTreeSubNodes(id,token.isSuperAdminIf()?null:token.getTokenId());
 		}
-		else {
-			nodes=orgService.loadSideTreeSubNodes(id);
+		else{
+			Set<String> authOrgs=null;
+			if(!token.isSuperAdminIf()) {  //非管理员就进行数据权限过滤
+				authOrgs=orgService.loadMyAuthOrgs(token.getTokenId());
+			}
+			nodes=orgService.loadSideTreeSubNodes(id,authOrgs);
 		}
 		return RespVOBuilder.ok(nodes);
 	}
+	
+	
+	
+	
 }

+ 35 - 6
src/main/java/com/hb/proj/base/service/WellService.java

@@ -23,18 +23,47 @@ public class WellService {
     
     private String tabName="tzl_well";
     
+    /**
+     * 查询井节点-数据权限分配
+     * @param usId
+     * @return
+     */
+    public List<SideTreeNode> loadAllWellNodes(){
+    	String sql="""
+				select w.well_id id,w.well_name name,w.org_id super_id,? node_type,1 type_end,1 is_leaf
+				from tzl_well w
+				where w.del_if=false
+				order by w.display_num
+				""";
+    	return dao.queryForList(sql,SideTreeNode.class,SideTreeNode.WELL_NODE);
+    }
     /**
 	 * 通过父节点查询直接子节点---用于主页侧边树
 	 * @param superId
 	 * @return
 	 */
-	public List<SideTreeNode>  loadSideTreeSubNodes(String superId){
-		StringBuilder sql=new StringBuilder();
-		sql.append("select w.well_id id,w.well_name name,w.org_id super_id,'"+SideTreeNode.WELL_NODE+"' node_type,1 type_end,1 is_leaf ");
-		sql.append(" from tzl_well w");
+	public List<SideTreeNode>  loadSideTreeSubNodes(String superId,String usId){
+		String sql="""
+				select w.well_id id,w.well_name name,w.org_id super_id,? node_type,1 type_end,1 is_leaf
+				from tzl_well w
+				where w.del_if=false and w.org_id=?
+				""";
+		
+		String authSql="""
+				and  exists(select  data_id from tsys_role_data_auth rd  
+				inner join tsys_user_role ur on rd.role_id=ur.role_id
+				where ur.user_id=? and rd.data_id=w.well_id)
+				""";
+		
+		String orderSql=" order by w.display_num ";
+		
+		if(StringUtils.isBlank(usId)) { 
+			return dao.queryForList(sql+orderSql,SideTreeNode.class,SideTreeNode.WELL_NODE, superId);
+		}
+		else {
+			return dao.queryForList(sql+authSql+orderSql,SideTreeNode.class,SideTreeNode.WELL_NODE, superId,usId);
+		}
 		
-		sql.append(" where w.del_if=false and w.org_id=?");
-		return dao.queryForList(sql.toString(),SideTreeNode.class, superId);
 	}
     
     

+ 46 - 8
src/main/java/com/hb/proj/sys/service/OrgService.java

@@ -2,6 +2,8 @@ package com.hb.proj.sys.service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -28,21 +30,57 @@ public class OrgService {
 		return dao.queryForList(sql.toString(),SideTreeNode.class);
 	}
 	
+	public Set<String> loadMyAuthOrgs(String usId){
+		String sql="""
+				select distinct g.org_id,g.assist_code from tsys_role_data_auth rd  
+				inner join tsys_user_role ur on rd.role_id=ur.role_id
+				inner join tzl_well w on rd.data_id=w.well_id and w.del_if=false 
+				inner join tsys_org g on w.org_id=g.org_id and g.del_if=false
+				where ur.user_id=?
+				""";
+		 Map<String,Object> mapping=dao.queryForMapping(sql, "org_id", "assist_code", usId);
+		 
+		 return mapping!=null&&mapping.size()>0?mapping.keySet():null;
+	}
+	
 	/**
 	 * 通过父节点查询直接子节点---用于主页侧边树
 	 * @param superId
+	 * @param  authOrgs 基于井权限的末级组织id
 	 * @return
 	 */
-	public List<SideTreeNode>  loadSideTreeSubNodes(String superId){
-		StringBuilder sql=new StringBuilder();
-		sql.append("select g.org_id id,g.org_name name,g.super_id,'"+SideTreeNode.ORG_NODE+"' node_type, ");
-		sql.append(" (select case when count(1)=0 then true else false end from tsys_org gs where gs.del_if=false and gs.super_id=g.org_id) type_end");
-		sql.append(" from tsys_org g");
+	public List<SideTreeNode>  loadSideTreeSubNodes(String superId,Set<String> authOrgs){
+		
+		String sql="""
+				select g.org_id id,g.org_name name,g.super_id,? node_type, 
+				(select case when count(1)=0 then true else false end from tsys_org gs 
+				 where gs.del_if=false and  gs.super_id=g.org_id
+				) type_end
+				
+				from tsys_org g where g.del_if=false and g.super_id=?
+				
+				""";
+		
+		
+		
+				
+		String orderSql=" order by display_num";
+		
+		if(authOrgs==null||authOrgs.size()==0) {
+			
+			return dao.queryForList(sql+orderSql,SideTreeNode.class, SideTreeNode.ORG_NODE,  superId);
+		}
 		
-		sql.append(" where g.del_if=false and g.super_id=?");
-		sql.append(" order by display_num");
 		
-		return dao.queryForList(sql.toString(),SideTreeNode.class, superId);
+		String orgs="'"+StringUtils.join(authOrgs,"','")+"'";
+		String authSql="""
+				  and  exists(select org_id from tsys_org g2 where g2.org_id in ("""
+				  +orgs+
+				  """
+				  ) and g2.del_if=false 
+				  and  g2.assist_code like concat(g.assist_code,'%') )
+				  """;
+		return dao.queryForList(sql+authSql+orderSql,SideTreeNode.class, SideTreeNode.ORG_NODE,superId);
 	}
 	
 	public String add(OrgPO org) {