From 057ba22b18e8903866c63e62c2b82f7ef521dd99 Mon Sep 17 00:00:00 2001 From: Masahiko AMANO Date: Fri, 4 Jul 2025 23:21:53 +0300 Subject: [PATCH] feat(backend/db): add function to get user's rights to a file --- backend/db/files.go | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/backend/db/files.go b/backend/db/files.go index b86d213..413fd3d 100644 --- a/backend/db/files.go +++ b/backend/db/files.go @@ -12,6 +12,28 @@ import ( "github.com/jackc/pgx/v5" ) +// Check if user can view file +func FileGetAccess(user_id int, file_id string) (canView, canEdit bool, err error) { + ctx := context.Background() + row := connPool.QueryRow(ctx, ` + WITH extras AS ( + SELECT + (SELECT creator_id FROM data.files WHERE id=$2)=$1 AS is_creator, + (SELECT is_admin FROM system.users WHERE id=$1) AS is_admin + ) + SELECT + af.view OR (SELECT is_creator OR is_admin FROM extras), + af.edit OR (SELECT is_creator OR is_admin FROM extras) + FROM acl.files af + WHERE af.user_id=$1 AND af.file_id=$2 + `, user_id, file_id) + err = row.Scan(&canView, &canEdit) + if err == pgx.ErrNoRows { + err = nil + } + return +} + // Get a set of files func FileGetSlice(user_id int, filter, sort string, limit, offset int) (files models.Slice[models.FileItem], statusCode int, err error) { filterCond, statusCode, err := filterToSQL(filter)