Browse Source

fix nodes filter with global network roles

abhishek9686 1 năm trước cách đây
mục cha
commit
d673c8ac8e
1 tập tin đã thay đổi với 16 bổ sung7 xóa
  1. 16 7
      pro/logic/user_mgmt.go

+ 16 - 7
pro/logic/user_mgmt.go

@@ -496,6 +496,9 @@ func GetUserNetworkRolesWithRemoteVPNAccess(user models.User) (gwAccess map[mode
 		gwAccess[models.NetworkID("*")] = make(map[models.RsrcID]models.RsrcPermissionScope)
 		return
 	}
+	if _, ok := user.NetworkRoles[models.AllNetworks]; ok {
+		gwAccess[models.NetworkID("*")] = make(map[models.RsrcID]models.RsrcPermissionScope)
+	}
 	logger.Log(0, "------------> 7.2 getUserRemoteAccessGwsV1")
 	for netID, roleMap := range user.NetworkRoles {
 		for roleID := range roleMap {
@@ -557,11 +560,17 @@ func GetFilteredNodesByUserAccess(user models.User, nodes []models.Node) (filter
 			}
 		}
 	}
+	if _, ok := user.NetworkRoles[models.AllNetworks]; ok {
+		return nodes
+	}
 	if len(user.UserGroups) > 0 {
 		for userGID := range user.UserGroups {
 			userG, err := GetUserGroup(userGID)
 			if err == nil {
 				if len(userG.NetworkRoles) > 0 {
+					if _, ok := userG.NetworkRoles[models.AllNetworks]; ok {
+						return nodes
+					}
 					for _, netRoles := range userG.NetworkRoles {
 						for netRoleI := range netRoles {
 							allNetworkRoles = append(allNetworkRoles, netRoleI)
@@ -576,13 +585,7 @@ func GetFilteredNodesByUserAccess(user models.User, nodes []models.Node) (filter
 		if err != nil {
 			continue
 		}
-		var networkNodes []models.Node
-		if userPermTemplate.NetworkID == models.AllNetworks {
-			networkNodes = nodes
-		} else {
-			networkNodes = logic.GetNetworkNodesMemory(nodes, userPermTemplate.NetworkID.String())
-		}
-
+		networkNodes := logic.GetNetworkNodesMemory(nodes, userPermTemplate.NetworkID.String())
 		if userPermTemplate.FullAccess {
 			for _, node := range networkNodes {
 				nodesMap[node.ID.String()] = struct{}{}
@@ -629,6 +632,9 @@ func FilterNetworksByRole(allnetworks []models.Network, user models.User) []mode
 		allNetworkRoles := make(map[models.NetworkID]struct{})
 		if len(user.NetworkRoles) > 0 {
 			for netID := range user.NetworkRoles {
+				if netID == models.AllNetworks {
+					return allnetworks
+				}
 				allNetworkRoles[netID] = struct{}{}
 
 			}
@@ -639,6 +645,9 @@ func FilterNetworksByRole(allnetworks []models.Network, user models.User) []mode
 				if err == nil {
 					if len(userG.NetworkRoles) > 0 {
 						for netID := range userG.NetworkRoles {
+							if netID == models.AllNetworks {
+								return allnetworks
+							}
 							allNetworkRoles[netID] = struct{}{}
 
 						}