@@ -2,6 +2,7 @@ package cli
2
2
3
3
import (
4
4
"fmt"
5
+ "strings"
5
6
6
7
"golang.org/x/xerrors"
7
8
@@ -11,16 +12,71 @@ import (
11
12
)
12
13
13
14
func (r * RootCmd ) organizationMembers () * serpent.Command {
15
+ cmd := & serpent.Command {
16
+ Use : "members" ,
17
+ Aliases : []string {"member" },
18
+ Short : "Manage organization members" ,
19
+ Children : []* serpent.Command {
20
+ r .listOrganizationMembers (),
21
+ r .assignOrganizationRoles (),
22
+ },
23
+ }
24
+
25
+ return cmd
26
+ }
27
+
28
+ func (r * RootCmd ) assignOrganizationRoles () * serpent.Command {
29
+ client := new (codersdk.Client )
30
+
31
+ cmd := & serpent.Command {
32
+ Use : "edit-roles <username | user_id> [roles...]" ,
33
+ Aliases : []string {"edit-role" },
34
+ Short : "Edit organization member's roles" ,
35
+ Middleware : serpent .Chain (
36
+ r .InitClient (client ),
37
+ ),
38
+ Handler : func (inv * serpent.Invocation ) error {
39
+ ctx := inv .Context ()
40
+ organization , err := CurrentOrganization (r , inv , client )
41
+ if err != nil {
42
+ return err
43
+ }
44
+
45
+ if len (inv .Args ) < 1 {
46
+ return xerrors .Errorf ("user_id or username is required as the first argument" )
47
+ }
48
+ userIdentifier := inv .Args [0 ]
49
+
50
+ member , err := client .UpdateOrganizationMemberRoles (ctx , organization .ID , userIdentifier , codersdk.UpdateRoles {
51
+ Roles : inv .Args [1 :],
52
+ })
53
+ if err != nil {
54
+ return xerrors .Errorf ("update member roles: %w" , err )
55
+ }
56
+
57
+ updatedTo := make ([]string , 0 )
58
+ for _ , role := range member .Roles {
59
+ updatedTo = append (updatedTo , role .String ())
60
+ }
61
+
62
+ _ , _ = fmt .Fprintf (inv .Stdout , "Member roles updated to [%s]\n " , strings .Join (updatedTo , ", " ))
63
+ return nil
64
+ },
65
+ }
66
+
67
+ return cmd
68
+ }
69
+
70
+ func (r * RootCmd ) listOrganizationMembers () * serpent.Command {
14
71
formatter := cliui .NewOutputFormatter (
15
72
cliui .TableFormat ([]codersdk.OrganizationMemberWithName {}, []string {"username" , "organization_roles" }),
16
73
cliui .JSONFormat (),
17
74
)
18
75
19
76
client := new (codersdk.Client )
20
77
cmd := & serpent.Command {
21
- Use : "members" ,
22
- Short : "List all organization members" ,
23
- Aliases : []string {"member" },
78
+ Use : "list" ,
79
+ Short : "List all organization members" ,
24
80
Middleware : serpent .Chain (
25
81
serpent .RequireNArgs (0 ),
26
82
r .InitClient (client ),
0 commit comments