diff --git a/logic/acls.go b/logic/acls.go index 613db4d6..7613f663 100644 --- a/logic/acls.go +++ b/logic/acls.go @@ -570,14 +570,14 @@ func IsUserAllowedToCommunicate(userName string, peer models.Node) (bool, []mode // IsPeerAllowed - checks if peer needs to be added to the interface func IsPeerAllowed(node, peer models.Node, checkDefaultPolicy bool) bool { - peerTags := maps.Clone(peer.Tags) - nodeTags := maps.Clone(node.Tags) if node.IsStatic { node = node.StaticNode.ConvertToStaticNode() } if peer.IsStatic { peer = peer.StaticNode.ConvertToStaticNode() } + peerTags := maps.Clone(peer.Tags) + nodeTags := maps.Clone(node.Tags) if checkDefaultPolicy { // check default policy if all allowed return true defaultPolicy, err := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy) @@ -660,6 +660,8 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) if peer.IsStatic { peer = peer.StaticNode.ConvertToStaticNode() } + peerTags := maps.Clone(peer.Tags) + nodeTags := maps.Clone(node.Tags) if checkDefaultPolicy { // check default policy if all allowed return true defaultPolicy, err := GetDefaultPolicy(models.NetworkID(node.Network), models.DevicePolicy) @@ -684,7 +686,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) } srcMap = convAclTagToValueMap(policy.Src) dstMap = convAclTagToValueMap(policy.Dst) - for tagID := range node.Tags { + for tagID := range nodeTags { allowed := false if _, ok := dstMap[tagID.String()]; policy.AllowedDirection == models.TrafficDirectionBi && ok { if _, ok := srcMap["*"]; ok { @@ -692,7 +694,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) allowedPolicies = append(allowedPolicies, policy) break } - for tagID := range peer.Tags { + for tagID := range peerTags { if _, ok := srcMap[tagID.String()]; ok { allowed = true break @@ -709,7 +711,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) allowedPolicies = append(allowedPolicies, policy) break } - for tagID := range peer.Tags { + for tagID := range peerTags { if _, ok := dstMap[tagID.String()]; ok { allowed = true break @@ -721,7 +723,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) break } } - for tagID := range peer.Tags { + for tagID := range peerTags { allowed := false if _, ok := dstMap[tagID.String()]; ok { if _, ok := srcMap["*"]; ok { @@ -729,7 +731,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) allowedPolicies = append(allowedPolicies, policy) break } - for tagID := range node.Tags { + for tagID := range nodeTags { if _, ok := srcMap[tagID.String()]; ok { allowed = true @@ -748,7 +750,7 @@ func IsNodeAllowedToCommunicate(node, peer models.Node, checkDefaultPolicy bool) allowedPolicies = append(allowedPolicies, policy) break } - for tagID := range node.Tags { + for tagID := range nodeTags { if _, ok := dstMap[tagID.String()]; ok { allowed = true break