3
0

upd(system-cli): assign user to role

This commit is contained in:
Mitja Zivkovic
2019-03-20 10:23:52 +01:00
committed by Tit Petric
parent 62933676dd
commit cf4ccdd12d
3 changed files with 75 additions and 4 deletions
+23 -1
View File
@@ -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)
+1 -3
View File
@@ -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()
}
+51
View File
@@ -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)
}