@@ -12,27 +12,100 @@ import (
12
12
"github.com/coder/coder/codersdk"
13
13
)
14
14
15
- func TestListRoles (t * testing.T ) {
15
+ func TestPermissionCheck (t * testing.T ) {
16
16
t .Parallel ()
17
17
18
- ctx := context .Background ()
19
18
client := coderdtest .New (t , nil )
20
19
// Create admin, member, and org admin
21
20
admin := coderdtest .CreateFirstUser (t , client )
22
21
member := coderdtest .CreateAnotherUser (t , client , admin .OrganizationID )
22
+ orgAdmin := coderdtest .CreateAnotherUser (t , client , admin .OrganizationID , rbac .RoleOrgAdmin (admin .OrganizationID ))
23
23
24
- orgAdmin := coderdtest .CreateAnotherUser (t , client , admin .OrganizationID )
25
- orgAdminUser , err := orgAdmin .User (ctx , codersdk .Me )
26
- require .NoError (t , err )
24
+ // With admin, member, and org admin
25
+ const (
26
+ allUsers = "read-all-users"
27
+ readOrgWorkspaces = "read-org-workspaces"
28
+ myself = "read-myself"
29
+ myWorkspace = "read-my-workspace"
30
+ )
31
+ params := map [string ]codersdk.UserPermissionCheck {
32
+ allUsers : {
33
+ Object : codersdk.UserPermissionCheckObject {
34
+ ResourceType : "users" ,
35
+ },
36
+ Action : "read" ,
37
+ },
38
+ myself : {
39
+ Object : codersdk.UserPermissionCheckObject {
40
+ ResourceType : "users" ,
41
+ OwnerID : "me" ,
42
+ },
43
+ Action : "read" ,
44
+ },
45
+ myWorkspace : {
46
+ Object : codersdk.UserPermissionCheckObject {
47
+ ResourceType : "workspaces" ,
48
+ OwnerID : "me" ,
49
+ },
50
+ Action : "read" ,
51
+ },
52
+ readOrgWorkspaces : {
53
+ Object : codersdk.UserPermissionCheckObject {
54
+ ResourceType : "workspaces" ,
55
+ OrganizationID : admin .OrganizationID .String (),
56
+ },
57
+ Action : "read" ,
58
+ },
59
+ }
27
60
28
- // TODO: @emyrk switch this to the admin when getting non-personal users is
29
- // supported. `client.UpdateOrganizationMemberRoles(...)`
30
- _ , err = orgAdmin .UpdateOrganizationMemberRoles (ctx , admin .OrganizationID , orgAdminUser .ID ,
31
- codersdk.UpdateRoles {
32
- Roles : []string {rbac .RoleOrgMember (admin .OrganizationID ), rbac .RoleOrgAdmin (admin .OrganizationID )},
61
+ testCases := []struct {
62
+ Name string
63
+ Client * codersdk.Client
64
+ Check codersdk.UserPermissionCheckResponse
65
+ }{
66
+ {
67
+ Name : "Admin" ,
68
+ Client : client ,
69
+ Check : map [string ]bool {
70
+ allUsers : true , myself : true , myWorkspace : true , readOrgWorkspaces : true ,
71
+ },
33
72
},
34
- )
35
- require .NoError (t , err , "update org member roles" )
73
+ {
74
+ Name : "Member" ,
75
+ Client : member ,
76
+ Check : map [string ]bool {
77
+ allUsers : false , myself : true , myWorkspace : true , readOrgWorkspaces : false ,
78
+ },
79
+ },
80
+ {
81
+ Name : "OrgAdmin" ,
82
+ Client : orgAdmin ,
83
+ Check : map [string ]bool {
84
+ allUsers : false , myself : true , myWorkspace : true , readOrgWorkspaces : true ,
85
+ },
86
+ },
87
+ }
88
+
89
+ for _ , c := range testCases {
90
+ c := c
91
+ t .Run (c .Name , func (t * testing.T ) {
92
+ t .Parallel ()
93
+ resp , err := c .Client .CheckPermissions (context .Background (), codersdk.UserPermissionCheckRequest {Checks : params })
94
+ require .NoError (t , err , "check perms" )
95
+ require .Equal (t , resp , c .Check )
96
+ })
97
+ }
98
+ }
99
+
100
+ func TestListRoles (t * testing.T ) {
101
+ t .Parallel ()
102
+
103
+ ctx := context .Background ()
104
+ client := coderdtest .New (t , nil )
105
+ // Create admin, member, and org admin
106
+ admin := coderdtest .CreateFirstUser (t , client )
107
+ member := coderdtest .CreateAnotherUser (t , client , admin .OrganizationID )
108
+ orgAdmin := coderdtest .CreateAnotherUser (t , client , admin .OrganizationID , rbac .RoleOrgAdmin (admin .OrganizationID ))
36
109
37
110
otherOrg , err := client .CreateOrganization (ctx , admin .UserID , codersdk.CreateOrganizationRequest {
38
111
Name : "other" ,
0 commit comments