Diskuze: Jak co nejefektivněji řešit uživatelská práva?
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tabulka s uzivateli, Tabulka s pravy
One/ManyToMany relationship
To mě napadlo, spíš řeším jestli jedno právo jeden sloupec a nastavovat true/false nebo tam ukládat třeba string read/edit/NULL nebo pod právo na ten jeden modul(sloupec v DB) sdružovat nějaká pod-práva? Ptám se, jak se to používá v praxi..
Můžeš to dělat jakým způsobem chceš(jaký je nejvhodnější pro danou aplikaci).
Já to mam tabulku takto:
id | role_name |
1 | ROLE_USER |
2 | ROLE_ADMIN |
V php mam vlastni funkci is_granted() ktera zjišťuje jestli uživatel ma danou roli.
if(!is_granted('ROLE_ADMIN'))
{
die('přístup zamítnut');
}
Samozřejmě 1 uživatel může mít více rolí, takže potom ověření vypada nějak takhle
if(!is_granted('ROLE_ADMIN') && !is_granted('ROLE_EDITOR') )
{
die('přístup zamítnut');
}
Tohle je únosné do určité míry, pokud to má být komplexnější
projekt, tak nastupuje ACL - access control list.
Snad všechny větší frameworky nabízejí nějakou funkcionalitu pro tento
přístup k uživatelským oprávněním. Nette, Zend atd. Nette má k tomuto
tématu pěknou dokumentaci, tak doporučuji pročíst. Nette
ACL
Nadefinuješ si role - např. guest, member, power user, admin,
superadmin.
Nadefinuješ si zdroje - např. administration, article, profile...
Nadefinuješ akce - např. view, edit, create
A následně nastavíš, co kdo může => allow(guest-article-view),
deny(guest-administration-view) a pak už se pouze v aplikaci na konkrétním
místě zeptáš, zda přihlášený uživatel má povoleno provést akci s
daným zdrojem. Pokud použiješ nějaký komplexnější systém, tak by si
měl framework sám zjistit, u jakého zdroje se nachází a jaká práva user
má.
Samozřejmě lze využít dědičnost rolí - co může guest, to může logicky i admin - obráceně to ale nefunguje.
Zkus se na to podívat, uvidíš.
Tohle mi příjde už jako overkill.
Tohle bych využil tak maximálně na nějaký projekt ala Magento.
uživatelská práva pro nějaký větší systém kde máte třeba více modulů
Já s tím overkillem tak úplně nesouhlasím - sice jsou tam počáteční
investice času do toho, aby člověk pochopil jak to funguje a jak to
implementovat, ale podle mě se ta investice vyplatí. Mít na jednom místě
konfiguraci všech práv a v aplikace se pouze ptát, zda pro to má
oprávnění, mi přijde jako čisté a hlavně přehledné řešení.
Samozřejmě u nějakého zabezpečení administrace pro jednoho uživatele je
to absurdní, ale zrovna u modulů, více úrovní uživatelů atd. bych to už
znova nechtěl řešit jinak.
Ale samozřejmě je to na každém z nás, jakou cestu si vybere. Zrovna u frameworků je to podaná
ruka a proč ji nevyužít.
To maš pravdu, že to záleží na daném programátorovi.
Jinak např. Symfony už defaultně nenabízí ACL(pokud ho chceš, musíš si ho doinstalovat).
Zobrazeno 9 zpráv z 9.