nodes.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. package proacls
  2. import (
  3. "github.com/gravitl/netmaker/logic/acls"
  4. "github.com/gravitl/netmaker/logic/acls/nodeacls"
  5. "github.com/gravitl/netmaker/models"
  6. )
  7. // AdjustNodeAcls - adjusts ACLs based on a node's default value
  8. func AdjustNodeAcls(node *models.Node, networkNodes []models.Node) error {
  9. networkID := nodeacls.NetworkID(node.Network)
  10. nodeID := nodeacls.NodeID(node.ID.String())
  11. currentACLs, err := nodeacls.FetchAllACLs(networkID)
  12. if err != nil {
  13. return err
  14. }
  15. for i := range networkNodes {
  16. currentNodeID := nodeacls.NodeID(networkNodes[i].ID.String())
  17. if currentNodeID == nodeID {
  18. continue
  19. }
  20. // 2 cases
  21. // both allow - allow
  22. // either 1 denies - deny
  23. if node.DoesACLDeny() || networkNodes[i].DoesACLDeny() {
  24. currentACLs.ChangeAccess(acls.AclID(nodeID), acls.AclID(currentNodeID), acls.NotAllowed)
  25. } else if node.DoesACLAllow() || networkNodes[i].DoesACLAllow() {
  26. currentACLs.ChangeAccess(acls.AclID(nodeID), acls.AclID(currentNodeID), acls.Allowed)
  27. }
  28. }
  29. _, err = currentACLs.Save(acls.ContainerID(node.Network))
  30. return err
  31. }