migrate.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package logic
  2. import (
  3. "fmt"
  4. "github.com/gravitl/netmaker/logic"
  5. "github.com/gravitl/netmaker/models"
  6. )
  7. func MigrateUserRoleAndGroups(user models.User) {
  8. var err error
  9. if user.PlatformRoleID == models.AdminRole || user.PlatformRoleID == models.SuperAdminRole {
  10. return
  11. }
  12. if len(user.RemoteGwIDs) > 0 {
  13. // define user roles for network
  14. // assign relevant network role to user
  15. for remoteGwID := range user.RemoteGwIDs {
  16. gwNode, err := logic.GetNodeByID(remoteGwID)
  17. if err != nil {
  18. continue
  19. }
  20. var g models.UserGroup
  21. if user.PlatformRoleID == models.ServiceUser {
  22. g, err = GetUserGroup(models.UserGroupID(fmt.Sprintf("%s-%s-grp", gwNode.Network, models.NetworkUser)))
  23. } else {
  24. g, err = GetUserGroup(models.UserGroupID(fmt.Sprintf("%s-%s-grp",
  25. gwNode.Network, models.NetworkAdmin)))
  26. }
  27. if err != nil {
  28. continue
  29. }
  30. user.UserGroups[g.ID] = struct{}{}
  31. }
  32. }
  33. if len(user.NetworkRoles) > 0 {
  34. for netID, netRoles := range user.NetworkRoles {
  35. var g models.UserGroup
  36. adminAccess := false
  37. for netRoleID := range netRoles {
  38. permTemplate, err := logic.GetRole(netRoleID)
  39. if err == nil {
  40. if permTemplate.FullAccess {
  41. adminAccess = true
  42. }
  43. }
  44. }
  45. if user.PlatformRoleID == models.ServiceUser {
  46. g, err = GetUserGroup(models.UserGroupID(fmt.Sprintf("%s-%s-grp", netID, models.NetworkUser)))
  47. } else {
  48. role := models.NetworkUser
  49. if adminAccess {
  50. role = models.NetworkAdmin
  51. }
  52. g, err = GetUserGroup(models.UserGroupID(fmt.Sprintf("%s-%s-grp",
  53. netID, role)))
  54. }
  55. if err != nil {
  56. continue
  57. }
  58. user.UserGroups[g.ID] = struct{}{}
  59. user.NetworkRoles = make(map[models.NetworkID]map[models.UserRoleID]struct{})
  60. }
  61. }
  62. logic.UpsertUser(user)
  63. }