Janusz Albin

Janusz Albin Webdeveloper / Lean
Specialist

Temat: system uprawnień - koncepcja

myślę nad wprowadzeniem możliwości rejestracji użytkowników na swojej stronce. Stanąłem chwilowo w 1 punkcie zastanawiając się jaki byłby dobry w miarę elastyczny system uprawnień.
chodzi mi tu o to że np.
na początku były by 4 możliwe rangi.
Konto zbanowane, użytkownik, moder , admin
oczywiście każde konto musi mieć inne możliwości.

czy dobrym rozwiązaniem było by stworzyć w bazie osobną tabele w której zamieszczało by sie inf. jaka ranga ma dostęp do których modułów.
np. id_rank / moduł
1 / czytaj post
1 / dodaj post
1 / zobacz najnowsze
1 / usuń użytkownika
2 / czytaj post
itp itd

następnie po zalogowaniu ładowało by się nazwy modułów do tablicy i dalej przy próbie utworzenia obiektu sprawdzało czy użytkownik ma dostęp do danej opcji.

myślałem też o acl ale mi jakoś nie podchodzi..

proszę o doradzenie.. może macie lepsze rozwiązanie?

konto usunięte

Temat: system uprawnień - koncepcja

Wydaje mi się, że trzymanie tego typu rzeczy w bazie ma sens, ale tylko w przypadku, gdy dane te są zmienne tzn. z poziomu panelu możesz zmienić prawa np. użytkownika. W takim wypadku baza jest naturalnym wyborem.
Jednak jeżeli masz cztery role (właściwie trzy i pewnie jakąś flagę określającą, czy konto jest zbanowane) i chcesz określić prawa dla każdej z nich na sztywno, to proponowałbym jednak acl'a.
Janusz Albin:
myślałem też o acl ale mi jakoś nie podchodzi..
Dlaczego ci nie podchodzi?

konto usunięte

Temat: system uprawnień - koncepcja

Poczytaj o RBAC

konto usunięte

Temat: system uprawnień - koncepcja

Janusz Albin:
proszę o doradzenie.. może macie lepsze rozwiązanie?

za Sebastianem, zapisywanie w bazie uprawnień do każdej operacji dla każdego użytkownika oddzielnie nie ma raczej sensu

(wszystko da się zrealizować przy pomocy grup)

lepiej zapisuj w bazie informacje o tym do jakiej grupy / grup uprawnień należy dany użytkownik

(o tym co jaka grupa może, niech podejmuje decyzje kontroler/aplikacja akcja)

w akcji/kontrolerze weryfikuj czy użytkownik jest przypisany do którejś z grup, która jest uprawniona

(jesli pojawi sie potrzeba....)

możesz później przenieść konfigurowanie modułu/aplikacji/akcji i powiązania z grupą do bazy

//

także krok po kroku w razie potrzeby (agile)

//

a tak w ogóle :

zadałeś "trudne" pytanie, bo

1. nie wiadomo jak działa Twój framework (może to jakiś opensource ?)
2. nie wiadomo co ma realizować dokładnie system uprawnień
3. ile chcesz na to poświecić czasu

:-)

jest wiele dobrych rozwiązań tego problemu w zalezności od konkretnej potrzeby i architektury (lub jej braku ;-))Tomasz Grzechowski edytował(a) ten post dnia 03.06.11 o godzinie 00:35

konto usunięte

Temat: system uprawnień - koncepcja

Poza tym musisz rozwiązać ważną kwestię - mianowicie co się stanie jak dojdą nowe elementy do których musisz przypisać uprawnienia. Będziesz modyfikował bazę za każdym razem ? Jeżeli do tych kilku operacji dojdą kolejne ? Co wtedy ? itp.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: system uprawnień - koncepcja

Najpierw sobie należy zadać pytanie - czy kontrola uprawnień będzie na poziomie stron (dostęp do jakiegoś url-a), czy mamy jakiś skomplikowany model domeny pod spodem i będziemy chcieli bardziej limitować dostęp do jakiś konkretnych czynności biznesowych (np. wystaw fakturę, listaTransakcji etc) ? W zależności od tego można się zabrać do projektowania całej architektury systemu...

konto usunięte

Temat: system uprawnień - koncepcja

reasumując jest dużo:

* w zależności od
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: system uprawnień - koncepcja

Tomasz Grzechowski:
reasumując jest dużo:

* w zależności od
Dlatego, moim zdaniem, najpierw przynajmniej jakiś szkic systemu który chcemy stworzyć a dopiero potem zastanawiać się nad szczegółami technicznymi takimi jak kontrola dostępu.
Miłosz Skurowski

Miłosz Skurowski Programista php /
software developer

Temat: system uprawnień - koncepcja

zapoznaj się z systemem uprawnień dostarczanym przez Symfony (sfGuard). Jest to dobry wzorzec do zaimplementowania
Robert P.

Robert P. Senior PHP Developer

Temat: system uprawnień - koncepcja

poczytaj o Zend_ACL
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: system uprawnień - koncepcja

Tak ze swojej strony, zachęcam do przestudiowania mojego artykułu -> http://blog.wsoczynski.pl/2011/07/04/kontrola-dostepu-...

konto usunięte

Temat: system uprawnień - koncepcja

Wojciech Soczyński:
Tomasz Grzechowski:
reasumując jest dużo:

* w zależności od
Dlatego, moim zdaniem, najpierw przynajmniej jakiś szkic systemu który chcemy stworzyć a dopiero potem zastanawiać się nad szczegółami technicznymi takimi jak kontrola dostępu.

od ogółu do szczegółu

:-)

to tak jak robienie rzeźby z klocka drewna

or somefing

;-)
Tomasz Krasoń

Tomasz Krasoń Programista php,
Centrum Systemów
Informatycznych Sp z
o.o.

Temat: system uprawnień - koncepcja

A ja kiedyś temat rozwiązałem przez dodanie do stron i modułów inta poziom dostępu oraz oczywiście do usera. Autentyfikacja polegała na dopasowaniu do siebie wartości pól usera i modułu/strony. 0 - dostęp ma każdy, 1 - zalogowany, 2 i wyżej to już ranki. Wadą jest oczywiście niemożliwość grupowania uprawnień, ale jeżeli masz system przyrostowy uprawnień ( znacyz każdy lepszy może tylko więcej ) sprawdza się znakomicie.

konto usunięte

Temat: system uprawnień - koncepcja

Dobrze jeśli w takim systemie jest dziedziczenie.
Tzn grupa dziedziczy uprawnienia z innej, użytkownik z grupy, ale też dany element (użytkownik / grupa) może mieć własne uprawnienia.
Dzięki temu załatwisz przypadki typu "księgowa w zastępstwie dyr. administracji".

Oczywiście jeśli to potrzebne.
Łukasz Z.

Łukasz Z. Specjalista ds
Informatyki w Mentor
S.A.

Temat: system uprawnień - koncepcja

Kilka projektów temu natrafiłem na podobny problem. Wymyśliłem sobie wtedy rozwiązanie, które stosuję do dzisiaj. Ma ono pewne wady i ograniczenia ale w razie potrzeby można to bardziej rozbudować.

Całą aplikację dzielę na poszczególne strony/moduły (czyli norma), gdzie każdy moduł ma swój rekord w bazie (zapisuję tam nazwę modułu, nazwę pliku z klasą, która obsługuje moduł oraz opcjonalnie np. nazwę bazy, z której korzysta). W osobnej tablicy zapisuję sobie użytkowników. Nadawanie uprawnień użytkownikom jest żmudne i prowadzi szybko do frustracji (szczególnie jak jest ich sporo). Prosi się więc o mechanizm zarządzania grupami użytkowników.
Ja w jednej tablicy zapisuję grupy (w sumie sam identyfikator i nazwa wystarcza - chociaż jakby się uprzeć to można zostawić same nazwy) a w drugiej powiązania użytkowników z grupami (dzięki temu mogę jednego użytkownika zapisać do wielu grup).
W tym momencie mam załatwioną obsługę grup - wróćmy na chwilę do modułów.
Założyłem sobie, że każdy moduł opisują cztery prawa:
- prawo do podglądu
- prawo do edycji danych
- prawo do dodawania danych
- prawo do usuwania danych.
Oczywiście można to bardziej rozwinąć - mi póki co więcej nie było potrzeba (jak na razie, chociaż noszę się z zamysłem wprowadzenia uprawnień do np. edycji konkretnych pól).
Teraz najważniejsze - stworzyłem tabelę, w której jeden rekord zawiera opis wszystkich czterech praw, identyfikator modułu oraz identyfikator grupy - czyli powiązuję grupę z uprawnieniami danego modułu.

Nie wiem czy coś takiego będzie przydatne w Twojej aplikacji. Ja z tego rozwiązania jestem bardzo zadowolony :)Łukasz Z. edytował(a) ten post dnia 14.07.11 o godzinie 13:04

Następna dyskusja:

System uprawnień.




Wyślij zaproszenie do