git4pipi/sql/AccessType.sql
2021-06-18 20:04:37 +02:00

60 lines
1.5 KiB
PL/PgSQL

CREATE OR REPLACE FUNCTION git."AccessType" (
gituserid integer,
gitrepo character varying
)
RETURNS git.gitrepoaccesstype
LANGUAGE plpgsql
AS $code$
DECLARE
selectedrepo git.gitrepoaccesstype;
BEGIN
/* user.repo */
SELECT MAX("accessType")
INTO selectedrepo
FROM git.perms
JOIN git.repos ON "repoID"=repos."ID"
WHERE repos.path=gitrepo AND "userID"=gituserid;
RETURN selectedrepo;
IF selectedrepo != NULL
THEN RETURN selectedrepo;
END IF;
/* groupe.repo */
SELECT MAX('accessType')
INTO selectedrepo
FROM git.perms
JOIN git.repos ON repoID=repos."ID"
JOIN git.appartenances ON appartenances."groupeID"=-perms."userID"
WHERE repos.path=gitrepo AND appartenances."utilisateurID"=gituserid;
IF selectedrepo != NULL
THEN RETURN selectedrepo;
END IF;
/* user.repoGroup */
SELECT MAX('accessType')
INTO selectedrepo
FROM git.perms
JOIN git.repos ON "repoID"=-repos."groupeID"
WHERE repos.path=gitrepo AND "userID"=gituserid;
IF selectedrepo != NULL
THEN RETURN selectedrepo;
END IF;
/* groupe.repoGroupe */
SELECT MAX('accessType')
INTO selectedrepo
FROM git.perms
JOIN git.appartenances ON appartenances."groupeID"=-perms."userID"
JOIN git.repos ON "repoID"=-repos."groupeID"
WHERE repos.path=gitrepo AND "userID"=gituserid;
RETURN selectedRepo;
END
$code$