소스 검색

add UI name to roles

abhishek9686 1 년 전
부모
커밋
4003848447
8개의 변경된 파일44개의 추가작업 그리고 7개의 파일을 삭제
  1. 14 0
      controllers/hosts.go
  2. 3 2
      logic/gateway.go
  3. 13 0
      logic/hosts.go
  4. 1 1
      logic/nodes.go
  5. 2 0
      logic/user_mgmt.go
  6. 3 2
      migrate/migrate.go
  7. 7 2
      models/user_mgmt.go
  8. 1 0
      pro/initialize.go

+ 14 - 0
controllers/hosts.go

@@ -219,6 +219,20 @@ func updateHost(w http.ResponseWriter, r *http.Request) {
 	}
 
 	newHost := newHostData.ConvertAPIHostToNMHost(currHost)
+
+	if newHost.Name != currHost.Name {
+		// update any rag role ids
+		for _, nodeID := range newHost.Nodes {
+			node, err := logic.GetNodeByID(nodeID)
+			if err == nil && node.IsIngressGateway {
+				role, err := logic.GetRole(models.GetRAGRoleID(node.Network, currHost.ID.String()))
+				if err == nil {
+					role.UiName = models.GetRAGRoleName(node.Network, newHost.Name)
+					logic.UpdateRole(role)
+				}
+			}
+		}
+	}
 	logic.UpdateHost(newHost, currHost) // update the in memory struct values
 	if err = logic.UpsertHost(newHost); err != nil {
 		logger.Log(0, r.Header.Get("user"), "failed to update a host:", err.Error())

+ 3 - 2
logic/gateway.go

@@ -180,7 +180,8 @@ func CreateIngressGateway(netid string, nodeid string, ingress models.IngressReq
 	}
 	// create network role for this gateway
 	CreateRole(models.UserRolePermissionTemplate{
-		ID:        models.GetRAGRoleName(node.Network, host.Name),
+		ID:        models.GetRAGRoleID(node.Network, host.ID.String()),
+		UiName:    models.GetRAGRoleName(node.Network, host.Name),
 		NetworkID: models.NetworkID(node.Network),
 		Default:   true,
 		NetworkLevelAccess: map[models.RsrcType]map[models.RsrcID]models.RsrcPermissionScope{
@@ -258,7 +259,7 @@ func DeleteIngressGateway(nodeid string) (models.Node, []models.ExtClient, error
 	if err != nil {
 		return models.Node{}, removedClients, err
 	}
-	go DeleteRole(models.GetRAGRoleName(node.Network, host.Name), true)
+	go DeleteRole(models.GetRAGRoleID(node.Network, host.ID.String()), true)
 	err = SetNetworkNodesLastModified(node.Network)
 	return node, removedClients, err
 }

+ 13 - 0
logic/hosts.go

@@ -269,6 +269,19 @@ func UpdateHostFromClient(newHost, currHost *models.Host) (sendPeerUpdate bool)
 	currHost.IsStaticPort = newHost.IsStaticPort
 	currHost.IsStatic = newHost.IsStatic
 	currHost.MTU = newHost.MTU
+	if newHost.Name != currHost.Name {
+		// update any rag role ids
+		for _, nodeID := range newHost.Nodes {
+			node, err := GetNodeByID(nodeID)
+			if err == nil && node.IsIngressGateway {
+				role, err := GetRole(models.GetRAGRoleID(node.Network, currHost.ID.String()))
+				if err == nil {
+					role.UiName = models.GetRAGRoleName(node.Network, newHost.Name)
+					UpdateRole(role)
+				}
+			}
+		}
+	}
 	currHost.Name = newHost.Name
 	if len(newHost.NatType) > 0 && newHost.NatType != currHost.NatType {
 		currHost.NatType = newHost.NatType

+ 1 - 1
logic/nodes.go

@@ -197,7 +197,7 @@ func DeleteNode(node *models.Node, purge bool) error {
 		}
 		host, err := GetHost(node.HostID.String())
 		if err == nil {
-			go DeleteRole(models.GetRAGRoleName(node.Network, host.Name), true)
+			go DeleteRole(models.GetRAGRoleID(node.Network, host.ID.String()), true)
 		}
 	}
 	if node.IsRelayed {

+ 2 - 0
logic/user_mgmt.go

@@ -43,6 +43,8 @@ var IsNetworkRolesValid = func(networkRoles map[models.NetworkID]map[models.User
 	return nil
 }
 
+var UpdateRole = func(r models.UserRolePermissionTemplate) error { return nil }
+
 var InitialiseRoles = userRolesInit
 var DeleteNetworkRoles = func(netID string) {}
 var CreateDefaultNetworkRolesAndGroups = func(netID models.NetworkID) {}

+ 3 - 2
migrate/migrate.go

@@ -323,7 +323,8 @@ func syncUsers() {
 					h, err := logic.GetHost(networkNodeI.HostID.String())
 					if err == nil {
 						logic.CreateRole(models.UserRolePermissionTemplate{
-							ID:        models.GetRAGRoleName(networkNodeI.Network, h.Name),
+							ID:        models.GetRAGRoleID(networkNodeI.Network, h.ID.String()),
+							UiName:    models.GetRAGRoleName(networkNodeI.Network, h.Name),
 							NetworkID: models.NetworkID(netI.NetID),
 							NetworkLevelAccess: map[models.RsrcType]map[models.RsrcID]models.RsrcPermissionScope{
 								models.RemoteAccessGwRsrc: {
@@ -387,7 +388,7 @@ func syncUsers() {
 					if err != nil {
 						continue
 					}
-					r, err := logic.GetRole(models.GetRAGRoleName(gwNode.Network, h.Name))
+					r, err := logic.GetRole(models.GetRAGRoleID(gwNode.Network, h.ID.String()))
 					if err != nil {
 						continue
 					}

+ 7 - 2
models/user_mgmt.go

@@ -27,8 +27,12 @@ func (rid RsrcID) String() string {
 	return string(rid)
 }
 
-func GetRAGRoleName(netID, hostName string) UserRoleID {
-	return UserRoleID(fmt.Sprintf("netID-%s-rag-%s", netID, hostName))
+func GetRAGRoleName(netID, hostName string) string {
+	return fmt.Sprintf("netID-%s-rag-%s", netID, hostName)
+}
+
+func GetRAGRoleID(netID, hostID string) UserRoleID {
+	return UserRoleID(fmt.Sprintf("netID-%s-rag-%s", netID, hostID))
 }
 
 var RsrcTypeMap = map[RsrcType]struct{}{
@@ -112,6 +116,7 @@ type RsrcPermissionScope struct {
 
 type UserRolePermissionTemplate struct {
 	ID                  UserRoleID                                  `json:"id"`
+	UiName              string                                      `json:"ui_name"`
 	Default             bool                                        `json:"default"`
 	DenyDashboardAccess bool                                        `json:"deny_dashboard_access"`
 	FullAccess          bool                                        `json:"full_access"`

+ 1 - 0
pro/initialize.go

@@ -121,6 +121,7 @@ func InitPro() {
 	mq.UpdateMetricsFallBack = proLogic.MQUpdateMetricsFallBack
 	logic.GetFilteredNodesByUserAccess = proLogic.GetFilteredNodesByUserAccess
 	logic.CreateRole = proLogic.CreateRole
+	logic.UpdateRole = proLogic.UpdateRole
 	logic.DeleteRole = proLogic.DeleteRole
 	logic.NetworkPermissionsCheck = proLogic.NetworkPermissionsCheck
 	logic.GlobalPermissionsCheck = proLogic.GlobalPermissionsCheck