fix(projects): properly check if a user or link share is allowed to create a new project
This commit is contained in:
parent
03eb4ecd07
commit
154ac61d7c
@ -276,7 +276,7 @@ func TestLinkSharing(t *testing.T) {
|
|||||||
// Creating a project should always be forbidden
|
// Creating a project should always be forbidden
|
||||||
t.Run("Create", func(t *testing.T) {
|
t.Run("Create", func(t *testing.T) {
|
||||||
t.Run("Nonexisting", func(t *testing.T) {
|
t.Run("Nonexisting", func(t *testing.T) {
|
||||||
_, err := testHandlerProjectReadOnly.testCreateWithLinkShare(nil, map[string]string{"namespace": "999999"}, `{"title":"Lorem"}`)
|
_, err := testHandlerProjectReadOnly.testCreateWithLinkShare(nil, nil, `{"title":"Lorem"}`)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
assert.Contains(t, err.(*echo.HTTPError).Message, `Forbidden`)
|
assert.Contains(t, err.(*echo.HTTPError).Message, `Forbidden`)
|
||||||
})
|
})
|
||||||
|
@ -161,7 +161,16 @@ func (p *Project) CanDelete(s *xorm.Session, a web.Auth) (bool, error) {
|
|||||||
|
|
||||||
// CanCreate checks if the user can create a project
|
// CanCreate checks if the user can create a project
|
||||||
func (p *Project) CanCreate(s *xorm.Session, a web.Auth) (bool, error) {
|
func (p *Project) CanCreate(s *xorm.Session, a web.Auth) (bool, error) {
|
||||||
return p.CanWrite(s, a)
|
if p.ParentProjectID != 0 {
|
||||||
|
parent := &Project{ID: p.ParentProjectID}
|
||||||
|
return parent.CanWrite(s, a)
|
||||||
|
}
|
||||||
|
// Check if we're dealing with a share auth
|
||||||
|
_, is := a.(*LinkSharing)
|
||||||
|
if is {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsAdmin returns whether the user has admin rights on the project or not
|
// IsAdmin returns whether the user has admin rights on the project or not
|
||||||
|
Loading…
x
Reference in New Issue
Block a user