mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: store coder_workspace_tags in the database (#13294)
This commit is contained in:
@@ -1786,6 +1786,29 @@ func (q *querier) GetTemplateVersionVariables(ctx context.Context, templateVersi
|
||||
return q.db.GetTemplateVersionVariables(ctx, templateVersionID)
|
||||
}
|
||||
|
||||
func (q *querier) GetTemplateVersionWorkspaceTags(ctx context.Context, templateVersionID uuid.UUID) ([]database.TemplateVersionWorkspaceTag, error) {
|
||||
tv, err := q.db.GetTemplateVersionByID(ctx, templateVersionID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var object rbac.Objecter
|
||||
template, err := q.db.GetTemplateByID(ctx, tv.TemplateID.UUID)
|
||||
if err != nil {
|
||||
if !errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, err
|
||||
}
|
||||
object = rbac.ResourceTemplate.InOrg(tv.OrganizationID)
|
||||
} else {
|
||||
object = tv.RBACObject(template)
|
||||
}
|
||||
|
||||
if err := q.authorizeContext(ctx, policy.ActionRead, object); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return q.db.GetTemplateVersionWorkspaceTags(ctx, templateVersionID)
|
||||
}
|
||||
|
||||
// GetTemplateVersionsByIDs is only used for workspace build data.
|
||||
// The workspace is already fetched.
|
||||
func (q *querier) GetTemplateVersionsByIDs(ctx context.Context, ids []uuid.UUID) ([]database.TemplateVersion, error) {
|
||||
@@ -2507,6 +2530,13 @@ func (q *querier) InsertTemplateVersionVariable(ctx context.Context, arg databas
|
||||
return q.db.InsertTemplateVersionVariable(ctx, arg)
|
||||
}
|
||||
|
||||
func (q *querier) InsertTemplateVersionWorkspaceTag(ctx context.Context, arg database.InsertTemplateVersionWorkspaceTagParams) (database.TemplateVersionWorkspaceTag, error) {
|
||||
if err := q.authorizeContext(ctx, policy.ActionCreate, rbac.ResourceSystem); err != nil {
|
||||
return database.TemplateVersionWorkspaceTag{}, err
|
||||
}
|
||||
return q.db.InsertTemplateVersionWorkspaceTag(ctx, arg)
|
||||
}
|
||||
|
||||
func (q *querier) InsertUser(ctx context.Context, arg database.InsertUserParams) (database.User, error) {
|
||||
// Always check if the assigned roles can actually be assigned by this actor.
|
||||
impliedRoles := append([]string{rbac.RoleMember()}, arg.RBACRoles...)
|
||||
|
||||
@@ -778,6 +778,16 @@ func (s *MethodTestSuite) TestTemplate() {
|
||||
})
|
||||
check.Args(tv.ID).Asserts(t1, policy.ActionRead).Returns([]database.TemplateVersionVariable{tvv1})
|
||||
}))
|
||||
s.Run("GetTemplateVersionWorkspaceTags", s.Subtest(func(db database.Store, check *expects) {
|
||||
t1 := dbgen.Template(s.T(), db, database.Template{})
|
||||
tv := dbgen.TemplateVersion(s.T(), db, database.TemplateVersion{
|
||||
TemplateID: uuid.NullUUID{UUID: t1.ID, Valid: true},
|
||||
})
|
||||
wt1 := dbgen.TemplateVersionWorkspaceTag(s.T(), db, database.TemplateVersionWorkspaceTag{
|
||||
TemplateVersionID: tv.ID,
|
||||
})
|
||||
check.Args(tv.ID).Asserts(t1, policy.ActionRead).Returns([]database.TemplateVersionWorkspaceTag{wt1})
|
||||
}))
|
||||
s.Run("GetTemplateGroupRoles", s.Subtest(func(db database.Store, check *expects) {
|
||||
t1 := dbgen.Template(s.T(), db, database.Template{})
|
||||
check.Args(t1.ID).Asserts(t1, policy.ActionUpdate)
|
||||
@@ -2339,6 +2349,9 @@ func (s *MethodTestSuite) TestSystemFunctions() {
|
||||
s.Run("InsertTemplateVersionVariable", s.Subtest(func(db database.Store, check *expects) {
|
||||
check.Args(database.InsertTemplateVersionVariableParams{}).Asserts(rbac.ResourceSystem, policy.ActionCreate)
|
||||
}))
|
||||
s.Run("InsertTemplateVersionWorkspaceTag", s.Subtest(func(db database.Store, check *expects) {
|
||||
check.Args(database.InsertTemplateVersionWorkspaceTagParams{}).Asserts(rbac.ResourceSystem, policy.ActionCreate)
|
||||
}))
|
||||
s.Run("UpdateInactiveUsersToDormant", s.Subtest(func(db database.Store, check *expects) {
|
||||
check.Args(database.UpdateInactiveUsersToDormantParams{}).Asserts(rbac.ResourceSystem, policy.ActionCreate).Errors(sql.ErrNoRows)
|
||||
}))
|
||||
|
||||
Reference in New Issue
Block a user