From: Michele Morgan Date: Thu, 29 Sep 2016 20:35:20 +0000 (-0400) Subject: Fixes a staff user permission depth issue that can exist when multiple permission... X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=bc30b137b270d4a45bd9fff1c85fdc4e830f030d;p=working%2FEvergreen.git Fixes a staff user permission depth issue that can exist when multiple permission groups are assigned Signed-off-by: Michele Morgan --- diff --git a/Open-ILS/src/sql/Pg/006.schema.permissions.sql b/Open-ILS/src/sql/Pg/006.schema.permissions.sql index 30f5ce86ac..df154fbf6c 100644 --- a/Open-ILS/src/sql/Pg/006.schema.permissions.sql +++ b/Open-ILS/src/sql/Pg/006.schema.permissions.sql @@ -177,7 +177,7 @@ CREATE OR REPLACE FUNCTION permission.usr_perms ( INT ) RETURNS SETOF permission FROM permission.grp_perm_map p WHERE p.grp IN (SELECT (permission.grp_ancestors(m.grp)).id FROM permission.usr_grp_map m WHERE usr = $1)) ) AS x - ORDER BY 2, 3, 1 DESC, 5 DESC ; + ORDER BY 2, 3, 4 ASC, 5 DESC ; $$ LANGUAGE SQL STABLE ROWS 10; CREATE TABLE permission.usr_work_ou_map ( diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.function.permission.user_perms.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.function.permission.user_perms.sql new file mode 100644 index 0000000000..10af7ba973 --- /dev/null +++ b/Open-ILS/src/sql/Pg/upgrade/XXXX.function.permission.user_perms.sql @@ -0,0 +1,27 @@ +BEGIN; + +SELECT evergreen.upgrade_deps_block_check('0991', :eg_version); + +CREATE OR REPLACE FUNCTION permission.usr_perms ( INT ) RETURNS SETOF permission.usr_perm_map AS $$ + SELECT DISTINCT ON (usr,perm) * + FROM ( + (SELECT * FROM permission.usr_perm_map WHERE usr = $1) + UNION ALL + (SELECT -p.id, $1 AS usr, p.perm, p.depth, p.grantable + FROM permission.grp_perm_map p + WHERE p.grp IN ( + SELECT (permission.grp_ancestors( + (SELECT profile FROM actor.usr WHERE id = $1) + )).id + ) + ) + UNION ALL + (SELECT -p.id, $1 AS usr, p.perm, p.depth, p.grantable + FROM permission.grp_perm_map p + WHERE p.grp IN (SELECT (permission.grp_ancestors(m.grp)).id FROM permission.usr_grp_map m WHERE usr = $1)) + ) AS x + ORDER BY 2, 3, 4 ASC, 5 DESC ; +$$ LANGUAGE SQL STABLE ROWS 10; + +COMMIT; +