Feladat alapú jogosultság kezelés a jogosultság hurokkal

Hojtsy Gábor képe

A Drupal 4.5.0-ás kiadásával kezdődően többféle jogosultság séma jelenléte lehetséges a rendszerben, melyek együttes hatásán múlik az, hogy egyes oldalakat illetve tartalmakat ki érhet el, ki szerkeszthet és ki törölhet. Ebben a leírásban a feladat alapú jogosultságkezeléshez történő fejlesztéssel foglalkozunk.

Bevezető

A Drupalban minden felhasználó valamilyen csoportba tartozik. Látogatóknak nevezzük azokat, akik nem regisztráltak a rendszeren, vagy nem léptek be. Ezek az érdeklődők az alapértelmezésben rendelkezésre álló anonymous user csoportba tartoznak automatikusan. Azon felhasználók, akik beléptek a rendszerbe, regisztrációjukkor az authenticated user csoportba kerültek besorolásra. Ezen a két alapcsoporton kívül természetesen lehetőség van bármennyi csoport létrehozására, az alaprendszerben pedig a felhasználók egyenkénti szerkesztésével tudjuk csoportba tartozásukat megadni.

A Drupal moduljai különböző jogosultságokat definiálnak, melyeket megadhatunk az egyes csoportoknak. Az adminisztráció » felhasználók » beállítás » jogosultságok oldalon találjuk azt a mátrixot, melyben a különböző csoportoknak megadhatjuk az egyes jogokat. Egy felhasználó több csoportba is tartozhat, és ilyenkor a jogosultságai összeadódnak, tehát ha egy csoportban megadtunk neki valamilyen jogot, akkor azt megkapja akkor is, ha más csoportnak – melyeknek tagja – nincs ilyen joga. Az elsőként regisztrált felhasználónak mindenhez joga van, csoportba tartozásától függetlenül.

A feladat alapú jogosultság rendszer azt teszi lehetővé, hogy egyes feladatokhoz (például írások létrehozása) jogot adjunk egy csoportnak. Ezzel a csoport tagjai a webhelyen létrehozhatnak írás típusú tartalmakat. A legfontosabb alapjogokat a node modul definiálja: tartalmak elérése és tartalmak adminisztrációja. Az előbbi lehetővé teszi, hogy a webhely tartalmait az adott csoportba tartozó felhasználók olvassák (ha más, például tartalom-szintű jogosultság ezt felül nem bírálja), az utóbbi pedig a tartalmak metaadatainak szerkesztését is lehetővé teszi, azaz tartalmak közzétételére, eltüntetésére is jogot ad.

Támogatott jogosultságok ellenőrzése

Saját modul fejlesztésekor könnyen előfordulhat, hogy egy meglévő jogosultság ellenőrzése tökéletesen megfelel számunkra. Ilyenkor a user_access() függvény és a kívánt jogosultság eredeti angol nevének ismerete elegendő. A user_access() az aktuális felhasználó (vagy a második paraméterében megadott felhasználó) jogosultságait ellenőrzi. Ezt a függvényt nagyon sok helyen megtaláljuk a Drupalban, többek között a menük előállításakor.

// A 'tartalom elérése' jogosultság ellenőrzése
if (user_access('access content')) {
// ...
}
?>

A jogosultság hurok

Mégis honnan tudhatjuk meg, hogy mi a számunkra érdekes jogosultság neve, illetve, a Drupal miként tudja listázni a beállítható jogosultságokat az adminisztrációs felületen? A válasz igen egyszerű: a jogosultság hurokban megadhatjuk a modulunk által definiált jogosultságokat. Ez a hurok egyszerűen egy jogosultság név listával tér vissza. Ezeket ajánlja majd fel a Drupal az adminisztrációs felületen, és ezeket használhatjuk nyugodtan user_access() hívásokban is. Nem kell definiálnunk a jogosultság hurkot, ha megelégszünk a rendelkezésre álló jogosultság készlettel, és nincs szükségünk újabbra. Ilyenkor a meglévő modulok jogosultság hurkaiból tudjuk kideríteni a definiált jogosultságok eredeti neveit – melyeket az adminisztrációs felület lefordítva jelenít meg a karbantartók életének megkönnyítése érdekében.

function meggymag_perm() {
return array("administer cherry seed", "collect cherry seeds");
}
?>

A jogosultságok elnevezésére bevett szokás az administer és access előtagok használata az adminisztrációs illetve elérési jogok megadására, ám ezek nem korlátozó szabályok, csak az áttekinthetőség érdekében bevezetett irányelvek.

Ha a fenti jogosultság hurkot definiáltuk, modulunkban nyugodtan használhatjuk a user_access("collect cherry seeds") jogosultság ellenőrzést, ha arra vagyunk kíváncsiak, hogy az adminisztrátor jogot adott-e az aktuális felhasználónak a meggymagok gyűjtésére.