MCPcopy Index your code
hub / github.com/coder/coder / userEditRoles

Method userEditRoles

cli/usereditroles.go:14–89  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

12)
13
14func (r *RootCmd) userEditRoles() *serpent.Command {
15 var givenRoles []string
16 cmd := &serpent.Command{
17 Use: "edit-roles <username|user_id>",
18 Short: "Edit a user's roles by username or id",
19 Options: []serpent.Option{
20 cliui.SkipPromptOption(),
21 {
22 Name: "roles",
23 Description: "A list of roles to give to the user. This removes any existing roles the user may have.",
24 Flag: "roles",
25 Value: serpent.StringArrayOf(&givenRoles),
26 },
27 },
28 Middleware: serpent.Chain(serpent.RequireNArgs(1)),
29 Handler: func(inv *serpent.Invocation) error {
30 client, err := r.InitClient(inv)
31 if err != nil {
32 return err
33 }
34
35 ctx := inv.Context()
36
37 user, err := client.User(ctx, inv.Args[0])
38 if err != nil {
39 return xerrors.Errorf("fetch user: %w", err)
40 }
41
42 userRoles, err := client.UserRoles(ctx, user.Username)
43 if err != nil {
44 return xerrors.Errorf("fetch user roles: %w", err)
45 }
46 siteRoles, err := client.ListSiteRoles(ctx)
47 if err != nil {
48 return xerrors.Errorf("fetch site roles: %w", err)
49 }
50 siteRoleNames := make([]string, 0, len(siteRoles))
51 for _, role := range siteRoles {
52 siteRoleNames = append(siteRoleNames, role.Name)
53 }
54
55 var selectedRoles []string
56 if len(givenRoles) > 0 {
57 // Make sure all of the given roles are valid site roles
58 for _, givenRole := range givenRoles {
59 if !slices.Contains(siteRoleNames, givenRole) {
60 siteRolesPretty := strings.Join(siteRoleNames, ", ")
61 return xerrors.Errorf("The role %s is not valid. Please use one or more of the following roles: %s\n", givenRole, siteRolesPretty)
62 }
63 }
64
65 selectedRoles = givenRoles
66 } else {
67 selectedRoles, err = cliui.MultiSelect(inv, cliui.MultiSelectOptions{
68 Message: "Select the roles you'd like to assign to the user",
69 Options: siteRoleNames,
70 Defaults: userRoles.Roles,
71 })

Callers 1

usersMethod · 0.95

Calls 10

InitClientMethod · 0.95
SkipPromptOptionFunction · 0.92
MultiSelectFunction · 0.92
UserRolesMethod · 0.80
ListSiteRolesMethod · 0.80
ContextMethod · 0.65
UserMethod · 0.65
UpdateUserRolesMethod · 0.65
ErrorfMethod · 0.45
ContainsMethod · 0.45

Tested by

no test coverage detected