From cf4ccdd12de48655f117a4d8dee073177b9e8f0e Mon Sep 17 00:00:00 2001 From: Mitja Zivkovic Date: Wed, 20 Mar 2019 10:23:52 +0100 Subject: [PATCH] upd(system-cli): assign user to role --- cmd/system-cli/commands.go | 24 +++++++++++++++++- cmd/system-cli/main.go | 4 +-- system/cli/roles.go | 51 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 4 deletions(-) diff --git a/cmd/system-cli/commands.go b/cmd/system-cli/commands.go index 50e4fe126..0a03ed89d 100644 --- a/cmd/system-cli/commands.go +++ b/cmd/system-cli/commands.go @@ -29,6 +29,17 @@ func setupCobra() { } cmdUsers.AddCommand(cmdUsersList) + // Assign role to user. + var cmdUserAssignRole = &cobra.Command{ + Use: "roleadd [userID] [roleID]", + Short: "Assign role to user", + Args: cobra.ExactArgs(2), + Run: func(cmd *cobra.Command, args []string) { + systemCli.RoleAssignUser(args[1], args[0]) + }, + } + cmdUsers.AddCommand(cmdUserAssignRole) + // Role management commands. var cmdRole = &cobra.Command{ Use: "roles", @@ -36,7 +47,7 @@ func setupCobra() { } rootCmd.AddCommand(cmdRole) - // Reset permissions. + // Reset roles. var cmdRolesReset = &cobra.Command{ Use: "reset", Short: "Reset roles", @@ -46,6 +57,17 @@ func setupCobra() { } cmdRole.AddCommand(cmdRolesReset) + // Add user to role. + var cmdRoleAddUser = &cobra.Command{ + Use: "useradd [roleID] [userID]", + Short: "Add user to role", + Args: cobra.ExactArgs(2), + Run: func(cmd *cobra.Command, args []string) { + systemCli.RoleAssignUser(args[0], args[1]) + }, + } + cmdRole.AddCommand(cmdRoleAddUser) + err := rootCmd.Execute() if err != nil { fmt.Println(err) diff --git a/cmd/system-cli/main.go b/cmd/system-cli/main.go index 1535156dc..dd10f77e7 100644 --- a/cmd/system-cli/main.go +++ b/cmd/system-cli/main.go @@ -6,7 +6,6 @@ import ( "github.com/crusttech/crust/internal/auth" system "github.com/crusttech/crust/system" - systemService "github.com/crusttech/crust/system/service" ) func main() { @@ -16,8 +15,7 @@ func main() { flags("system", system.Flags, auth.Flags) - system.InitDatabase() - systemService.Init() + system.Init() setupCobra() } diff --git a/system/cli/roles.go b/system/cli/roles.go index 54b93c96a..ad0029b2e 100644 --- a/system/cli/roles.go +++ b/system/cli/roles.go @@ -4,8 +4,10 @@ import ( "context" "fmt" "os" + "strconv" "github.com/crusttech/crust/system/internal/repository" + "github.com/crusttech/crust/system/types" ) func RolesReset() { @@ -20,3 +22,52 @@ func RolesReset() { fmt.Println("Everyone and Administrators role were reset.") } + +func RoleAssignUser(roleStr string, userStr string) { + ctx := context.Background() + db := repository.DB(ctx) + + // Create role and user repository. + roleRepo := repository.Role(ctx, db) + userRepo := repository.User(ctx, db) + + var err error + + // Try to parse roleID. + roleID, err := strconv.ParseUint(roleStr, 10, 64) + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } + + // Check if role ID exists. + role, err := roleRepo.FindByID(roleID) + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } + + var userID uint64 + var user *types.User + + // Try to parse userID. + userID, err = strconv.ParseUint(userStr, 10, 64) + if err != nil { + user, err = userRepo.FindByEmail(userStr) + } else { + user, err = userRepo.FindByID(userID) + } + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } + + // Add user to role. + err = roleRepo.MemberAddByID(role.ID, user.ID) + if err != nil { + fmt.Printf("Error: %v\n", err) + os.Exit(1) + } + + fmt.Printf("Added user: %d %s to role: %s\n", user.ID, user.Email, role.Name) +}