upd(system-cli): assign user to role
This commit is contained in:
parent
62933676dd
commit
cf4ccdd12d
@ -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)
|
||||
|
||||
@ -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()
|
||||
}
|
||||
|
||||
@ -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)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user