mirror of
https://codeberg.org/shroff/phylum.git
synced 2026-01-02 01:29:42 -06:00
17 lines
828 B
SQL
17 lines
828 B
SQL
|
|
-- name: PermissionsForResource :one
|
|
WITH RECURSIVE nodes(id, parent, permission) AS (
|
|
SELECT r.id, r.parent, p.permission
|
|
FROM resources r LEFT JOIN permissions p on r.id = p.resource_id WHERE r.id = @resource_id::uuid AND p.user_id = @user_id::int
|
|
UNION ALL
|
|
SELECT r.id, r.parent, CASE WHEN (n.permission IS NULL OR p.permission > n.permission) THEN p.permission ELSE n.permission END
|
|
FROM resources r JOIN nodes n ON r.id = n.parent LEFT JOIN permissions p ON r.id = p.resource_id AND p.user_id = @user_id::int
|
|
)
|
|
SELECT * FROM nodes WHERE parent IS NULL;
|
|
|
|
-- name: UpdatePermissionsForResource :exec
|
|
INSERT INTO permissions(resource_id, user_id, permission)
|
|
VALUES(@resource_id::uuid, @user_id::int, @permission::int)
|
|
ON CONFLICT(resource_id, user_id) DO UPDATE SET permission = @permission::int;
|
|
|