Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit9e199d3

Browse files
authored
add test for template rbac admin pushing template version (#4438)
1 parent21af86e commit9e199d3

File tree

4 files changed

+96
-11
lines changed

4 files changed

+96
-11
lines changed

‎coderd/templates.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,13 @@ func (api *API) postTemplateByOrganization(rw http.ResponseWriter, r *http.Reque
306306
returnxerrors.Errorf("update template group acl: %w",err)
307307
}
308308

309+
tpl,err:=tx.GetTemplateByID(ctx,dbTemplate.ID)
310+
iferr!=nil {
311+
panic(err)
312+
}
313+
314+
fmt.Printf("GROUP ACL: %+v\n",tpl.GroupACL())
315+
309316
createdByNameMap,err:=getCreatedByNamesByTemplateIDs(ctx,tx, []database.Template{dbTemplate})
310317
iferr!=nil {
311318
returnxerrors.Errorf("get creator name: %w",err)

‎coderd/templateversions.go

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -686,14 +686,10 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
686686
return
687687
}
688688

689-
// Making a new template version is the same permission as creating a new template.
690-
if!api.Authorize(r,rbac.ActionCreate,rbac.ResourceTemplate.InOrg(organization.ID)) {
691-
httpapi.ResourceNotFound(rw)
692-
return
693-
}
694-
689+
vartemplate database.Template
695690
ifreq.TemplateID!=uuid.Nil {
696-
_,err:=api.Database.GetTemplateByID(ctx,req.TemplateID)
691+
varerrerror
692+
template,err=api.Database.GetTemplateByID(ctx,req.TemplateID)
697693
iferrors.Is(err,sql.ErrNoRows) {
698694
httpapi.Write(ctx,rw,http.StatusNotFound, codersdk.Response{
699695
Message:"Template does not exist.",
@@ -709,6 +705,17 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
709705
}
710706
}
711707

708+
iftemplate.ID!=uuid.Nil {
709+
if!api.Authorize(r,rbac.ActionCreate,template) {
710+
httpapi.ResourceNotFound(rw)
711+
return
712+
}
713+
}elseif!api.Authorize(r,rbac.ActionCreate,rbac.ResourceTemplate.InOrg(organization.ID)) {
714+
// Making a new template version is the same permission as creating a new template.
715+
httpapi.ResourceNotFound(rw)
716+
return
717+
}
718+
712719
file,err:=api.Database.GetFileByHash(ctx,req.StorageSource)
713720
iferrors.Is(err,sql.ErrNoRows) {
714721
httpapi.Write(ctx,rw,http.StatusNotFound, codersdk.Response{
@@ -724,10 +731,12 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
724731
return
725732
}
726733

727-
if!api.Authorize(r,rbac.ActionRead,file) {
728-
httpapi.ResourceNotFound(rw)
729-
return
730-
}
734+
// TODO(JonA): Readd this check once we update the unique constraint
735+
// on files to be owner + hash.
736+
// if !api.Authorize(r, rbac.ActionRead, file) {
737+
// httpapi.ResourceNotFound(rw)
738+
// return
739+
// }
731740

732741
vartemplateVersion database.TemplateVersion
733742
varprovisionerJob database.ProvisionerJob

‎coderd/templateversions_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,22 @@ func TestTemplateVersion(t *testing.T) {
3434
_,err:=client.TemplateVersion(ctx,version.ID)
3535
require.NoError(t,err)
3636
})
37+
38+
t.Run("MemberCanRead",func(t*testing.T) {
39+
t.Parallel()
40+
41+
client:=coderdtest.New(t,nil)
42+
user:=coderdtest.CreateFirstUser(t,client)
43+
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
44+
_=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID)
45+
46+
ctx,_:=testutil.Context(t)
47+
48+
client1,_:=coderdtest.CreateAnotherUserWithUser(t,client,user.OrganizationID)
49+
50+
_,err:=client1.TemplateVersion(ctx,version.ID)
51+
require.NoError(t,err)
52+
})
3753
}
3854

3955
funcTestPostTemplateVersionsByOrganization(t*testing.T) {

‎enterprise/coderd/templates_test.go

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/coder/coder/coderd/coderdtest"
1212
"github.com/coder/coder/codersdk"
1313
"github.com/coder/coder/enterprise/coderd/coderdenttest"
14+
"github.com/coder/coder/provisioner/echo"
1415
"github.com/coder/coder/testutil"
1516
)
1617

@@ -255,6 +256,58 @@ func TestTemplateACL(t *testing.T) {
255256
Role:codersdk.TemplateRoleView,
256257
})
257258
})
259+
260+
t.Run("AdminCanPushVersions",func(t*testing.T) {
261+
t.Parallel()
262+
client:=coderdenttest.New(t,nil)
263+
user:=coderdtest.CreateFirstUser(t,client)
264+
_=coderdenttest.AddLicense(t,client, coderdenttest.LicenseOptions{
265+
RBACEnabled:true,
266+
})
267+
268+
client1,user1:=coderdtest.CreateAnotherUserWithUser(t,client,user.OrganizationID)
269+
version:=coderdtest.CreateTemplateVersion(t,client,user.OrganizationID,nil)
270+
template:=coderdtest.CreateTemplate(t,client,user.OrganizationID,version.ID)
271+
272+
ctx,_:=testutil.Context(t)
273+
274+
err:=client.UpdateTemplateACL(ctx,template.ID, codersdk.UpdateTemplateACL{
275+
UserPerms:map[string]codersdk.TemplateRole{
276+
user1.ID.String():codersdk.TemplateRoleView,
277+
},
278+
})
279+
require.NoError(t,err)
280+
281+
data,err:=echo.Tar(nil)
282+
require.NoError(t,err)
283+
file,err:=client1.Upload(context.Background(),codersdk.ContentTypeTar,data)
284+
require.NoError(t,err)
285+
286+
_,err=client1.CreateTemplateVersion(ctx,user.OrganizationID, codersdk.CreateTemplateVersionRequest{
287+
Name:"testme",
288+
TemplateID:template.ID,
289+
StorageSource:file.Hash,
290+
StorageMethod:codersdk.ProvisionerStorageMethodFile,
291+
Provisioner:codersdk.ProvisionerTypeEcho,
292+
})
293+
require.Error(t,err)
294+
295+
err=client.UpdateTemplateACL(ctx,template.ID, codersdk.UpdateTemplateACL{
296+
UserPerms:map[string]codersdk.TemplateRole{
297+
user1.ID.String():codersdk.TemplateRoleAdmin,
298+
},
299+
})
300+
require.NoError(t,err)
301+
302+
_,err=client1.CreateTemplateVersion(ctx,user.OrganizationID, codersdk.CreateTemplateVersionRequest{
303+
Name:"testme",
304+
TemplateID:template.ID,
305+
StorageSource:file.Hash,
306+
StorageMethod:codersdk.ProvisionerStorageMethodFile,
307+
Provisioner:codersdk.ProvisionerTypeEcho,
308+
})
309+
require.NoError(t,err)
310+
})
258311
}
259312

260313
funcTestUpdateTemplateACL(t*testing.T) {

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp