Skip to content

Commit d1cfa73

Browse files
committed
authzquery: implement group and system methods
- Use new dbgen methods for tests in system.go - Implement panicky methods in group.go - nit: rename Metadatums to Metadata 8-)
1 parent b6afc2a commit d1cfa73

File tree

4 files changed

+21
-11
lines changed

4 files changed

+21
-11
lines changed

coderd/authzquery/group.go

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,24 @@ func (q *AuthzQuerier) DeleteGroupMemberFromGroup(ctx context.Context, arg datab
2323
}
2424

2525
func (q *AuthzQuerier) InsertUserGroupsByName(ctx context.Context, arg database.InsertUserGroupsByNameParams) error {
26-
panic("not implemented")
26+
// This will add the user to all named groups. This counts as updating a group.
27+
// NOTE: instead of checking if the user has permission to update each group, we instead
28+
// check if the user has permission to update *a* group in the org.
29+
fetch := func(ctx context.Context, arg database.InsertUserGroupsByNameParams) (rbac.Objecter, error) {
30+
return rbac.ResourceGroup.InOrg(arg.OrganizationID), nil
31+
}
32+
return authorizedUpdate(q.logger, q.authorizer, fetch, q.database.InsertUserGroupsByName)(ctx, arg)
2733
}
2834

2935
func (q *AuthzQuerier) DeleteGroupMembersByOrgAndUser(ctx context.Context, arg database.DeleteGroupMembersByOrgAndUserParams) error {
30-
panic("not implemented")
36+
// This will remove the user from all groups in the org. This counts as updating a group.
37+
// Authorizing this 100% correctly requires fetching all groups in the org, and checking if the user is a member.
38+
// If so, we then need to check if the caller has permission to update those groups.
39+
// This is prohibitively expensive, so we instead check if the caller has permission to update *a* group in the org.
40+
fetch := func(ctx context.Context, arg database.DeleteGroupMembersByOrgAndUserParams) (rbac.Objecter, error) {
41+
return rbac.ResourceGroup.InOrg(arg.OrganizationID), nil
42+
}
43+
return authorizedUpdate(q.logger, q.authorizer, fetch, q.database.DeleteGroupMembersByOrgAndUser)(ctx, arg)
3144
}
3245

3346
func (q *AuthzQuerier) GetGroupByID(ctx context.Context, id uuid.UUID) (database.Group, error) {

coderd/authzquery/system_test.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,8 +161,7 @@ func (suite *MethodTestSuite) TestSystemFunctions() {
161161
})
162162
suite.Run("GetWorkspaceAppsCreatedAfter", func() {
163163
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
164-
// TODO: Implement this
165-
//_ = dbgen.WorkspaceApp(t, db, database.WorkspaceApp{CreatedAt: time.Now().Add(-time.Hour)})
164+
_ = dbgen.WorkspaceApp(t, db, database.WorkspaceApp{CreatedAt: time.Now().Add(-time.Hour)})
166165
return methodCase(inputs(time.Now()), asserts())
167166
})
168167
})
@@ -174,8 +173,7 @@ func (suite *MethodTestSuite) TestSystemFunctions() {
174173
})
175174
suite.Run("GetWorkspaceResourceMetadataCreatedAfter", func() {
176175
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
177-
// TODO: Implement this
178-
//_ = dbgen.database.WorkspaceResourceMetadatum(t, db, database.WorkspaceResourceMetadatum{CreatedAt: time.Now().Add(-time.Hour)})
176+
_ = dbgen.WorkspaceResourceMetadata(t, db, database.WorkspaceResourceMetadatum{})
179177
return methodCase(inputs(time.Now()), asserts())
180178
})
181179
})
@@ -186,8 +184,7 @@ func (suite *MethodTestSuite) TestSystemFunctions() {
186184
})
187185
suite.Run("GetParameterSchemasCreatedAfter", func() {
188186
suite.RunMethodTest(func(t *testing.T, db database.Store) MethodCase {
189-
// TODO: Implement this
190-
//schema := dbgen.ParameterSchema(t, db, database.ParameterSchema{CreatedAt: time.Now().Add(-time.Hour)})
187+
_ = dbgen.ParameterSchema(t, db, database.ParameterSchema{CreatedAt: time.Now().Add(-time.Hour)})
191188
return methodCase(inputs(time.Now()), asserts())
192189
})
193190
})

coderd/database/dbgen/generator.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ func WorkspaceResource(t *testing.T, db database.Store, orig database.WorkspaceR
314314
return resource
315315
}
316316

317-
func WorkspaceResourceMetadatums(t *testing.T, db database.Store, seed database.WorkspaceResourceMetadatum) []database.WorkspaceResourceMetadatum {
317+
func WorkspaceResourceMetadata(t *testing.T, db database.Store, seed database.WorkspaceResourceMetadatum) []database.WorkspaceResourceMetadatum {
318318
meta, err := db.InsertWorkspaceResourceMetadata(context.Background(), database.InsertWorkspaceResourceMetadataParams{
319319
WorkspaceResourceID: takeFirst(seed.WorkspaceResourceID, uuid.New()),
320320
Key: []string{takeFirst(seed.Key, namesgenerator.GetRandomName(1))},

coderd/database/dbgen/generator_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,10 +68,10 @@ func TestGenerator(t *testing.T) {
6868
require.Equal(t, exp, must(db.GetWorkspaceAppsByAgentID(context.Background(), exp.AgentID))[0])
6969
})
7070

71-
t.Run("WorkspaceResourceMetadatum", func(t *testing.T) {
71+
t.Run("WorkspaceResourceMetadata", func(t *testing.T) {
7272
t.Parallel()
7373
db := dbfake.New()
74-
exp := dbgen.WorkspaceResourceMetadatums(t, db, database.WorkspaceResourceMetadatum{})
74+
exp := dbgen.WorkspaceResourceMetadata(t, db, database.WorkspaceResourceMetadatum{})
7575
require.Equal(t, exp, must(db.GetWorkspaceResourceMetadataByResourceIDs(context.Background(), []uuid.UUID{exp[0].WorkspaceResourceID})))
7676
})
7777

0 commit comments

Comments
 (0)