ソースを参照

refactor user groups models

abhishek9686 1 年間 前
コミット
bb44816800
3 ファイル変更32 行追加33 行削除
  1. 2 2
      controllers/user.go
  2. 21 22
      logic/user_mgmt.go
  3. 9 9
      models/user_mgmt.go

+ 2 - 2
controllers/user.go

@@ -94,7 +94,7 @@ func getUserGroup(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("group id is required"), "badrequest"))
 		return
 	}
-	group, err := logic.GetUserGroup(gid)
+	group, err := logic.GetUserGroup(models.UserGroupID(gid))
 	if err != nil {
 		logic.ReturnErrorResponse(w, r, models.ErrorResponse{
 			Code:    http.StatusInternalServerError,
@@ -179,7 +179,7 @@ func deleteUserGroup(w http.ResponseWriter, r *http.Request) {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(errors.New("role is required"), "badrequest"))
 		return
 	}
-	err := logic.DeleteUserGroup(gid)
+	err := logic.DeleteUserGroup(models.UserGroupID(gid))
 	if err != nil {
 		logic.ReturnErrorResponse(w, r, logic.FormatError(err, "internal"))
 		return

+ 21 - 22
logic/user_mgmt.go

@@ -3,7 +3,6 @@ package logic
 import (
 	"encoding/json"
 	"errors"
-	"fmt"
 
 	"github.com/gravitl/netmaker/database"
 	"github.com/gravitl/netmaker/models"
@@ -124,14 +123,18 @@ func DeleteRole(rid models.UserRole) error {
 		return err
 	}
 	for _, user := range users {
-		// for groupID := range user.UserGroups {
-		// 	ug, err := GetUserGroup(groupID.String())
-		// 	if err == nil && ug.N.ID == rid {
-		// 		err = errors.New("role cannot be deleted as active user groups are using this role")
-		// 		return err
-		// 	}
-		// 	continue
-		// }
+		if user.UserGroup != "" {
+			ug, err := GetUserGroup(user.UserGroup)
+			if err == nil {
+				for _, networkRole := range ug.NetworkRoles {
+					if networkRole == rid {
+						err = errors.New("role cannot be deleted as active user groups are using this role")
+						return err
+					}
+				}
+			}
+		}
+
 		if user.PlatformRoleID == rid {
 			err = errors.New("active roles cannot be deleted.switch existing users to a new role before deleting")
 			return err
@@ -164,8 +167,8 @@ func CreateUserGroup(g models.UserGroup) error {
 }
 
 // GetUserGroup - fetches user group
-func GetUserGroup(gid string) (models.UserGroup, error) {
-	d, err := database.FetchRecord(database.USER_GROUPS_TABLE_NAME, gid)
+func GetUserGroup(gid models.UserGroupID) (models.UserGroup, error) {
+	d, err := database.FetchRecord(database.USER_GROUPS_TABLE_NAME, gid.String())
 	if err == nil {
 		return models.UserGroup{}, err
 	}
@@ -213,19 +216,18 @@ func UpdateUserGroup(g models.UserGroup) error {
 }
 
 // DeleteUserGroup - deletes user group
-func DeleteUserGroup(gid string) error {
+func DeleteUserGroup(gid models.UserGroupID) error {
 	users, err := GetUsersDB()
 	if err != nil {
 		return err
 	}
 	for _, user := range users {
-		fmt.Println("TODO: ", user)
-		// if user.GroupID == gid {
-		// 	err = errors.New("role cannot be deleted as active user groups are using this role")
-		// 	return err
-		// }
+		if user.UserGroup == gid {
+			err = errors.New("role cannot be deleted as active user groups are using this role")
+			return err
+		}
 	}
-	return database.DeleteRecord(database.USER_GROUPS_TABLE_NAME, gid)
+	return database.DeleteRecord(database.USER_GROUPS_TABLE_NAME, gid.String())
 }
 
 func HasNetworkRsrcScope(permissionTemplate models.UserRolePermissionTemplate, netid string, rsrcType models.RsrcType, rsrcID models.RsrcID, op string) bool {
@@ -238,8 +240,5 @@ func HasNetworkRsrcScope(permissionTemplate models.UserRolePermissionTemplate, n
 		return false
 	}
 	_, ok = rsrcScope[rsrcID]
-	if !ok {
-		return false
-	}
-	return true
+	return ok
 }

+ 9 - 9
models/user_mgmt.go

@@ -78,15 +78,15 @@ type UserGroup struct {
 
 // User struct - struct for Users
 type User struct {
-	UserName       string                   `json:"username" bson:"username" validate:"min=3,max=40,in_charset|email"`
-	Password       string                   `json:"password" bson:"password" validate:"required,min=5"`
-	IsAdmin        bool                     `json:"isadmin" bson:"isadmin"`
-	IsSuperAdmin   bool                     `json:"issuperadmin"`
-	RemoteGwIDs    map[string]struct{}      `json:"remote_gw_ids"`
-	UserGroups     map[UserGroupID]struct{} `json:"user_groups"`
-	PlatformRoleID UserRole                 `json:"platform_role_id"`
-	NetworkRoles   map[NetworkID]UserRole   `json:"network_roles"`
-	LastLoginTime  time.Time                `json:"last_login_time"`
+	UserName       string                 `json:"username" bson:"username" validate:"min=3,max=40,in_charset|email"`
+	Password       string                 `json:"password" bson:"password" validate:"required,min=5"`
+	IsAdmin        bool                   `json:"isadmin" bson:"isadmin"`
+	IsSuperAdmin   bool                   `json:"issuperadmin"`
+	RemoteGwIDs    map[string]struct{}    `json:"remote_gw_ids"`
+	UserGroup      UserGroupID            `json:"user_groups"`
+	PlatformRoleID UserRole               `json:"platform_role_id"`
+	NetworkRoles   map[NetworkID]UserRole `json:"network_roles"`
+	LastLoginTime  time.Time              `json:"last_login_time"`
 }
 
 // ReturnUser - return user struct