page: Dynamická správa rolí a zdrojů
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- stephanos
- Člen | 7
Diskuse ke stránce Dynamická správa rolí a zdrojů
elseif ($r['privilege'] === NULL && $r['resource'] === NULL) { $this->allow($r['role']); }
tento kúsok kódu sa nikdy nevykoná, keďže databáza nikdy nevráti
privilege alebo resource ako NULL
Návrh na zmenu:
$rules = dibi::fetchAll("
(SELECT ro.name AS role,
pr.name AS privilege,
re.name AS resource,
a.allowed AS allowed
FROM acl AS a
JOIN roles AS ro ON a.role_id = ro.id
JOIN privileges AS pr ON a.privilege_id = pr.id
JOIN resources AS re ON a.resource_id = re.id
ORDER BY ro.id ASC)
UNION
(SELECT ro.name AS role,
NULL AS privilege,
NULL AS resource,
a.allowed AS allowed
FROM acl AS a
JOIN roles AS ro ON a.role_id = ro.id
WHERE
a.privilege_id IS NULL
AND
a.resource_id IS NULL
ORDER BY ro.id ASC);"
);
prípadne, ak by sa v tabuľkách resources a privileges nachádzali položky name s hodnotou NULL, tak je potrebné upraviť dopyt na resources tak, aby nevrátil NULL hodnoty
$resources = dibi::fetchAll("SELECT name AS resource FROM resource WHERE name IS NOT NULL ORDER BY id ASC;");
PS: pri odosielaní to nechcelo zobrať predmet "[page
dynamicka-sprava-roli-a-zdroju] Dynamická správa rolí a zdrojů", ktorý má
vraj cez 70 znakov, aj keď má len 68 ;-)