From 7883ffcbda515afaa4f5e707ce1c058c717fab80 Mon Sep 17 00:00:00 2001 From: Abhishek Shroff Date: Sun, 6 Apr 2025 03:39:37 +0530 Subject: [PATCH] [server][core] Properly update grants in returned object --- server/internal/core/fs/permissions.go | 34 +++++++++----------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/server/internal/core/fs/permissions.go b/server/internal/core/fs/permissions.go index d57f0d89..6584b7a6 100644 --- a/server/internal/core/fs/permissions.go +++ b/server/internal/core/fs/permissions.go @@ -1,8 +1,6 @@ package fs import ( - "encoding/json" - "github.com/google/uuid" "github.com/jackc/pgx/v5" ) @@ -27,25 +25,30 @@ func (r Resource) UpdatePermissions(username string, permission Permission) (Res UPDATE resources SET grants[@username::TEXT] = jsonb_build_object('p', @permission::INT, 't', EXTRACT(EPOCH FROM NOW())::INTEGER), modified = NOW() -WHERE id = @resource_id::UUID` +WHERE id = @resource_id::UUID +RETURNING grants` const qRemove = ` UPDATE resources SET - grants = grants - @username::TEXT + grants = grants - @username::TEXT, modified = NOW() -WHERE id = @resource_id::UUID` +WHERE id = @resource_id::UUID +RETURNING grants` q := qUpdate if permission == PermissionNone { q = qRemove } + var grants []byte err := r.f.runInTx(func(f filesystem) error { - if _, err := f.db.Exec(q, pgx.NamedArgs{ + row := f.db.QueryRow(q, pgx.NamedArgs{ "resource_id": r.id, "username": username, "permission": permission, - }); err != nil { + }) + + if err := row.Scan(&grants); err != nil { return err } @@ -54,23 +57,8 @@ WHERE id = @resource_id::UUID` if err != nil { return Resource{}, err } - p := make(map[string]Permission) - if r.permissions != nil { - if err := json.Unmarshal(r.permissions, &p); err != nil { - return Resource{}, err - } - } - if permission == 0 { - delete(p, username) - } else { - p[username] = permission - } - res, err := json.Marshal(p) - if err != nil { - return Resource{}, err - } - r.permissions = res + r.grants = grants return r, nil }