1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-19 05:09:42 +02:00

Allow non space creators to manage space settings

Fixes #337
This commit is contained in:
McMatts 2019-11-13 09:49:19 +00:00
parent 7fc74be7cd
commit 0e6f2f1f5e
2 changed files with 27 additions and 5 deletions

View file

@ -147,6 +147,26 @@ func CanUploadDocument(ctx domain.RequestContext, s store.Store, spaceID string)
return false return false
} }
// CanManageSpace returns if the user has permission to manage the given space.
func CanManageSpace(ctx domain.RequestContext, s store.Store, spaceID string) bool {
roles, err := s.Permission.GetUserSpacePermissions(ctx, spaceID)
if err == sql.ErrNoRows {
err = nil
}
if err != nil {
return false
}
for _, role := range roles {
if role.RefID == spaceID && role.Location == pm.LocationSpace && role.Scope == pm.ScopeRow &&
pm.ContainsPermission(role.Action, pm.SpaceManage, pm.SpaceOwner) {
return true
}
}
return false
}
// CanViewSpace returns if the user has permission to view the given spaceID. // CanViewSpace returns if the user has permission to view the given spaceID.
func CanViewSpace(ctx domain.RequestContext, s store.Store, spaceID string) bool { func CanViewSpace(ctx domain.RequestContext, s store.Store, spaceID string) bool {
roles, err := s.Permission.GetUserSpacePermissions(ctx, spaceID) roles, err := s.Permission.GetUserSpacePermissions(ctx, spaceID)

View file

@ -487,11 +487,6 @@ func (h *Handler) Update(w http.ResponseWriter, r *http.Request) {
method := "space.update" method := "space.update"
ctx := domain.GetRequestContext(r) ctx := domain.GetRequestContext(r)
if !ctx.Editor {
response.WriteForbiddenError(w)
return
}
spaceID := request.Param(r, "spaceID") spaceID := request.Param(r, "spaceID")
if len(spaceID) == 0 { if len(spaceID) == 0 {
response.WriteMissingDataError(w, method, "spaceID") response.WriteMissingDataError(w, method, "spaceID")
@ -522,6 +517,13 @@ func (h *Handler) Update(w http.ResponseWriter, r *http.Request) {
sp.RefID = spaceID sp.RefID = spaceID
// Check permissions (either Documize admin OR space owner/manager).
canManage := perm.CanViewSpace(ctx, *h.Store, spaceID)
if !canManage && !ctx.Administrator {
response.WriteForbiddenError(w)
return
}
// Retreive previous record for comparison later. // Retreive previous record for comparison later.
prev, err := h.Store.Space.Get(ctx, spaceID) prev, err := h.Store.Space.Get(ctx, spaceID)
if err != nil { if err != nil {