45 lines
1.3 KiB
PL/PgSQL
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$
|