user_mgmt.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. package logic
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "time"
  6. "github.com/gravitl/netmaker/database"
  7. "github.com/gravitl/netmaker/models"
  8. )
  9. // Pre-Define Permission Templates for default Roles
  10. var SuperAdminPermissionTemplate = models.UserRolePermissionTemplate{
  11. ID: models.SuperAdminRole,
  12. Default: true,
  13. FullAccess: true,
  14. }
  15. var AdminPermissionTemplate = models.UserRolePermissionTemplate{
  16. ID: models.AdminRole,
  17. Default: true,
  18. FullAccess: true,
  19. }
  20. var GetFilteredNodesByUserAccess = func(user models.User, nodes []models.Node) (filteredNodes []models.Node) {
  21. return
  22. }
  23. var CreateRole = func(r models.UserRolePermissionTemplate) error {
  24. return nil
  25. }
  26. var DeleteRole = func(r models.UserRoleID, force bool) error {
  27. return nil
  28. }
  29. var FilterNetworksByRole = func(allnetworks []models.Network, user models.User) []models.Network {
  30. return allnetworks
  31. }
  32. var IsGroupsValid = func(groups map[models.UserGroupID]struct{}) error {
  33. return nil
  34. }
  35. var IsGroupValid = func(groupID models.UserGroupID) error {
  36. return nil
  37. }
  38. var IsNetworkRolesValid = func(networkRoles map[models.NetworkID]map[models.UserRoleID]struct{}) error {
  39. return nil
  40. }
  41. var MigrateUserRoleAndGroups = func(u models.User) {
  42. }
  43. var MigrateToUUIDs = func() {}
  44. var UpdateUserGwAccess = func(currentUser, changeUser models.User) {}
  45. var UpdateRole = func(r models.UserRolePermissionTemplate) error { return nil }
  46. var InitialiseRoles = userRolesInit
  47. var IntialiseGroups = func() {}
  48. var DeleteNetworkRoles = func(netID string) {}
  49. var CreateDefaultNetworkRolesAndGroups = func(netID models.NetworkID) {}
  50. var CreateDefaultUserPolicies = func(netID models.NetworkID) {
  51. if netID.String() == "" {
  52. return
  53. }
  54. if !IsAclExists(fmt.Sprintf("%s.%s", netID, "all-users")) {
  55. defaultUserAcl := models.Acl{
  56. ID: fmt.Sprintf("%s.%s", netID, "all-users"),
  57. Default: true,
  58. Name: "All Users",
  59. MetaData: "This policy gives access to everything in the network for an user",
  60. NetworkID: netID,
  61. Proto: models.ALL,
  62. ServiceType: models.Any,
  63. Port: []string{},
  64. RuleType: models.UserPolicy,
  65. Src: []models.AclPolicyTag{
  66. {
  67. ID: models.UserAclID,
  68. Value: "*",
  69. },
  70. },
  71. Dst: []models.AclPolicyTag{{
  72. ID: models.NodeTagID,
  73. Value: "*",
  74. }},
  75. AllowedDirection: models.TrafficDirectionUni,
  76. Enabled: true,
  77. CreatedBy: "auto",
  78. CreatedAt: time.Now().UTC(),
  79. }
  80. InsertAcl(defaultUserAcl)
  81. }
  82. }
  83. var ListUserGroups = func() ([]models.UserGroup, error) { return nil, nil }
  84. var GetUserGroupsInNetwork = func(netID models.NetworkID) (networkGrps map[models.UserGroupID]models.UserGroup) { return }
  85. var GetUserGroup = func(groupId models.UserGroupID) (userGrps models.UserGroup, err error) { return }
  86. var AddGlobalNetRolesToAdmins = func(u *models.User) {}
  87. var EmailInit = func() {}
  88. // GetRole - fetches role template by id
  89. func GetRole(roleID models.UserRoleID) (models.UserRolePermissionTemplate, error) {
  90. // check if role already exists
  91. data, err := database.FetchRecord(database.USER_PERMISSIONS_TABLE_NAME, roleID.String())
  92. if err != nil {
  93. return models.UserRolePermissionTemplate{}, err
  94. }
  95. ur := models.UserRolePermissionTemplate{}
  96. err = json.Unmarshal([]byte(data), &ur)
  97. if err != nil {
  98. return ur, err
  99. }
  100. return ur, nil
  101. }
  102. // ListPlatformRoles - lists user platform roles permission templates
  103. func ListPlatformRoles() ([]models.UserRolePermissionTemplate, error) {
  104. data, err := database.FetchRecords(database.USER_PERMISSIONS_TABLE_NAME)
  105. if err != nil && !database.IsEmptyRecord(err) {
  106. return []models.UserRolePermissionTemplate{}, err
  107. }
  108. userRoles := []models.UserRolePermissionTemplate{}
  109. for _, dataI := range data {
  110. userRole := models.UserRolePermissionTemplate{}
  111. err := json.Unmarshal([]byte(dataI), &userRole)
  112. if err != nil {
  113. continue
  114. }
  115. if userRole.NetworkID != "" {
  116. continue
  117. }
  118. userRoles = append(userRoles, userRole)
  119. }
  120. return userRoles, nil
  121. }
  122. func GetAllRsrcIDForRsrc(rsrc models.RsrcType) models.RsrcID {
  123. switch rsrc {
  124. case models.HostRsrc:
  125. return models.AllHostRsrcID
  126. case models.RelayRsrc:
  127. return models.AllRelayRsrcID
  128. case models.RemoteAccessGwRsrc:
  129. return models.AllRemoteAccessGwRsrcID
  130. case models.ExtClientsRsrc:
  131. return models.AllExtClientsRsrcID
  132. case models.InetGwRsrc:
  133. return models.AllInetGwRsrcID
  134. case models.EgressGwRsrc:
  135. return models.AllEgressGwRsrcID
  136. case models.NetworkRsrc:
  137. return models.AllNetworkRsrcID
  138. case models.EnrollmentKeysRsrc:
  139. return models.AllEnrollmentKeysRsrcID
  140. case models.UserRsrc:
  141. return models.AllUserRsrcID
  142. case models.DnsRsrc:
  143. return models.AllDnsRsrcID
  144. case models.FailOverRsrc:
  145. return models.AllFailOverRsrcID
  146. case models.AclRsrc:
  147. return models.AllAclsRsrcID
  148. case models.TagRsrc:
  149. return models.AllTagsRsrcID
  150. }
  151. return ""
  152. }
  153. func userRolesInit() {
  154. d, _ := json.Marshal(SuperAdminPermissionTemplate)
  155. database.Insert(SuperAdminPermissionTemplate.ID.String(), string(d), database.USER_PERMISSIONS_TABLE_NAME)
  156. d, _ = json.Marshal(AdminPermissionTemplate)
  157. database.Insert(AdminPermissionTemplate.ID.String(), string(d), database.USER_PERMISSIONS_TABLE_NAME)
  158. }