mirror of
https://github.com/documize/community.git
synced 2025-07-19 13:19:43 +02:00
parent
7fc74be7cd
commit
0e6f2f1f5e
2 changed files with 27 additions and 5 deletions
|
@ -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)
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue