NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

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.

Aktivity
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:25.1.2018 13:28

Ahoj, nepatří to jen do PHP ale nevím kam sním jinak.
Mám dotaz, jak řešíte uživatelská práva pro nějaký větší systém kde máte třeba více modulů (stránek/karet) a potřebujete jednak vědět jestli má uživatel přístup a taky jestli má přístup zobrazit/edito­vat/mazat. Jakým způsobem si taková práva ukládat do DB? Nebo celkově, jak to řešíte?

 
Odpovědět
25.1.2018 13:28
Avatar
Neaktivní uživatel:25.1.2018 13:32

Tabulka s uzivateli, Tabulka s pravy

One/ManyToMany relationship

Editováno 25.1.2018 13:33
Nahoru Odpovědět
25.1.2018 13:32
Neaktivní uživatelský účet
Avatar
Ondřej Pech
Člen
Avatar
Ondřej Pech:25.1.2018 13:48

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..

 
Nahoru Odpovědět
25.1.2018 13:48
Avatar
Neaktivní uživatel:25.1.2018 14:19

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');
}
Editováno 25.1.2018 14:21
Nahoru Odpovědět
25.1.2018 14:19
Neaktivní uživatelský účet
Avatar
Neaktivní uživatel:25.1.2018 14:23

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');
}
Editováno 25.1.2018 14:23
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
25.1.2018 14:23
Neaktivní uživatelský účet
Avatar
Hando
Člen
Avatar
Hando:25.1.2018 14:47

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íš. :)

 
Nahoru Odpovědět
25.1.2018 14:47
Avatar
Odpovídá na Hando
Neaktivní uživatel:25.1.2018 15:33

Tohle mi příjde už jako overkill.
Tohle bych využil tak maximálně na nějaký projekt ala Magento.

Nahoru Odpovědět
25.1.2018 15:33
Neaktivní uživatelský účet
Avatar
Hando
Člen
Avatar
Hando:25.1.2018 15:44

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.

 
Nahoru Odpovědět
25.1.2018 15:44
Avatar
Odpovídá na Hando
Neaktivní uživatel:25.1.2018 15:54

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).

Editováno 25.1.2018 15:56
Nahoru Odpovědět
25.1.2018 15:54
Neaktivní uživatelský účet
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.