git4pipi/sql/AccessibleRepos.sql
2021-07-28 22:52:43 +02:00

45 lines
1.3 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION git."AccessibleRepos" (
gituserid integer,
accesst git.gitrepoaccesstype
)
RETURNS table(
ID integer,
path character varying(255),
name character varying(255),
owner character varying(255),
description character varying,
groupeID integer,
logoUrl character varying(255)
)
LANGUAGE plpgsql
AS $code$
BEGIN
RETURN QUERY
/* user.repo */
SELECT repos.*
FROM git.perms
JOIN git.repos ON "repoID"=repos."ID"
WHERE "accessType">=accesst AND "userID"=gituserid
UNION
/* groupe.repo */
SELECT repos.*
FROM git.perms
JOIN git.repos ON "repoID"=repos."ID"
JOIN git.appartenances ON appartenances."groupeID"=-perms."userID"
WHERE "accessType">=accesst AND appartenances."utilisateurID"=gituserid
UNION
/* user.repoGroup */
SELECT repos.*
FROM git.perms
JOIN git.repos ON "repoID"=-repos."groupeID"
WHERE "accessType">=accesst AND "userID"=gituserid
UNION
/* groupe.repoGroupe */
SELECT repos.*
FROM git.perms
JOIN git.appartenances ON appartenances."groupeID"=-perms."userID"
JOIN git.repos ON "repoID"=-repos."groupeID"
WHERE "accessType">=accesst AND "userID"=gituserid;
END
$code$