63 lines
1.7 KiB
PL/PgSQL
63 lines
1.7 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
|
|
|
|
IF gitrepo LIKE '/%'
|
|
THEN gitrepo := SUBSTRING(gitrepo,1,LENGTH(gitrepo)-1);
|
|
END IF;
|
|
/* user.repo */
|
|
SELECT MAX("accessType")
|
|
INTO selectedrepo
|
|
FROM git.perms
|
|
JOIN git.repos ON "repoID"=repos."ID"
|
|
WHERE repos.path=gitrepo AND "userID"=gituserid;
|
|
|
|
IF selectedrepo != NULL
|
|
THEN RETURN selectedrepo;
|
|
END IF;
|
|
RAISE WARNING 'Le repo na pas marche 2';
|
|
/* groupe.repo */
|
|
SELECT MAX(perms."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;
|
|
RAISE WARNING 'Le repo na pas marche 3';
|
|
|
|
/* 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;
|
|
RAISE WARNING 'Le repo na pas marche 4';
|
|
/* 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$
|