1
1
package cli
2
2
3
3
import (
4
- "fmt"
5
4
"slices"
6
- "sort"
7
5
"strings"
8
6
9
7
"golang.org/x/xerrors"
10
8
11
9
"github.com/coder/coder/v2/cli/cliui"
12
- "github.com/coder/coder/v2/coderd/rbac"
13
10
"github.com/coder/coder/v2/codersdk"
14
11
"github.com/coder/serpent"
15
12
)
16
13
17
14
func (r * RootCmd ) userEditRoles () * serpent.Command {
18
15
client := new (codersdk.Client )
19
-
20
- roles := rbac .SiteRoles ()
21
-
22
- siteRoles := make ([]string , 0 )
23
- for _ , role := range roles {
24
- siteRoles = append (siteRoles , role .Identifier .Name )
25
- }
26
- sort .Strings (siteRoles )
27
-
28
16
var givenRoles []string
29
-
30
17
cmd := & serpent.Command {
31
18
Use : "edit-roles <username|user_id>" ,
32
19
Short : "Edit a user's roles by username or id" ,
33
20
Options : []serpent.Option {
34
21
cliui .SkipPromptOption (),
35
22
{
36
23
Name : "roles" ,
37
- Description : fmt . Sprintf ( "A list of roles to give to the user. This removes any existing roles the user may have. The available roles are: %s." , strings . Join ( siteRoles , ", " )) ,
24
+ Description : "A list of roles to give to the user. This removes any existing roles the user may have." ,
38
25
Flag : "roles" ,
39
26
Value : serpent .StringArrayOf (& givenRoles ),
40
27
},
@@ -52,13 +39,21 @@ func (r *RootCmd) userEditRoles() *serpent.Command {
52
39
if err != nil {
53
40
return xerrors .Errorf ("fetch user roles: %w" , err )
54
41
}
42
+ siteRoles , err := client .ListSiteRoles (ctx )
43
+ if err != nil {
44
+ return xerrors .Errorf ("fetch site roles: %w" , err )
45
+ }
46
+ siteRoleNames := make ([]string , 0 , len (siteRoles ))
47
+ for _ , role := range siteRoles {
48
+ siteRoleNames = append (siteRoleNames , role .Name )
49
+ }
55
50
56
51
var selectedRoles []string
57
52
if len (givenRoles ) > 0 {
58
53
// Make sure all of the given roles are valid site roles
59
54
for _ , givenRole := range givenRoles {
60
- if ! slices .Contains (siteRoles , givenRole ) {
61
- siteRolesPretty := strings .Join (siteRoles , ", " )
55
+ if ! slices .Contains (siteRoleNames , givenRole ) {
56
+ siteRolesPretty := strings .Join (siteRoleNames , ", " )
62
57
return xerrors .Errorf ("The role %s is not valid. Please use one or more of the following roles: %s\n " , givenRole , siteRolesPretty )
63
58
}
64
59
}
@@ -67,7 +62,7 @@ func (r *RootCmd) userEditRoles() *serpent.Command {
67
62
} else {
68
63
selectedRoles , err = cliui .MultiSelect (inv , cliui.MultiSelectOptions {
69
64
Message : "Select the roles you'd like to assign to the user" ,
70
- Options : siteRoles ,
65
+ Options : siteRoleNames ,
71
66
Defaults : userRoles .Roles ,
72
67
})
73
68
if err != nil {
0 commit comments