Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Nadawanie uprawnień użytkownikom, oraz grupom
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
DeyV
Stanąłem przed zadaniem wykonania serwisu, z bardzo rozbudowanym systemem nadawania uprawnień oraz ograniczeń poszczególnym użytkownikom, grupom użytkowników, oraz całej reszcie. Żeby było ciekawej, ma być kilkadziesiąt różnych działów, dla których każdy użytkownik (grupa uż.) może mieć około 7 różnych uprawnień (zapis, odczyt, edycja, odczyt swoich , odczyt grupowych, edycja swoich, edycja grupowych).
Oczywiście różne formularze, ekrany, działy wymagają różnych poziomów uprawnień.
Tyle tytułem wstępu. Niestety, chyba przeoczyłem stosowny wykład winksmiley.jpg
Stąd moje pytanie brzmi tak: Jak to zmontować?
Moim pierwszym pomysłem było stworzenie łańcuchu (stringa) gdzie każda kolejna pozycja byłaby kolejnym działem, a jej wartość - poziomem uprawnienia np.
pozycja 1 - produkty;
pozycja 2 - kategorie
a np.
1 -odczyt
2 -zapis
3 -edycja itd.

Więc zapis '1 3' oznaczałyby uprawnienie do odczytu z produktów oraz edycji w kategoriach. Powstaje coś w postaci CHMOD, tylko z większą ilością uprawnień.
W ten sposób jednak dosyć trudno utworzyć sumowanie atrybutów (np. mogę odczytywać i zapisywać).
Nie bardzo wiem również, jak testować na podstronie, czy dana osoba ma do tego uprawnienie, czy też nie, tym bardziej, że musi to być w miarę prosta funkcja, gdyż na jednej podstronie może być konieczne wielokrotne jej wywoływanie (choćby testowanie, czy wyświetlić dany link, czy nie).
Kolejny problem = choć wiem, jak stworzyć grupę użytkowników, oraz nadawać jej uprawnienia, to jednak nie mam pomysłu, jak przydzielić jednego użytkownika do kilku grup, a następnie sumować ich uprawnienia (a często może to być przydatne).

Myślę, że jest to dosyć ciekawy temat do rozważań. Więc czy macie jakieś metody lub choćby pomysły?
GeoS
Moim zdaniem prawa powinienes rozlozyc troche inaczej.
Uprawnienia to jedna liczba, ktora oznacza poszczegolne kombinacje, np:
1 - zapis, odczyt
2 - odczyt, edycja
...

W takim rozwiazaniu odpada Ci problem tworzenia tablic, ... , sprawdzasz tylko czy user ma konkretne poziomy dostepu (jesli sie nie myle to mozesz cala aplikacje w duzym stopniu oprzec na czyms takim jak phpSecurePages lub czyms o zblizonej nazwie).

Jesli chodzi o przynaleznosc do grup. Zeby nie dac sie zwariowac, to ja bym z gory okreslil maksymalna ilosc, do jakiej moze przynalezec user. Tylko pytanie, czy w wypadku twojego projektu to przejdzie :?:
kurtz
1)
kolejne uprawnienia to kolejna potega 2 np
1 - do odczytu swoich
2 - do edycji swoich
4 - do podgladu innych
8 - do edycji innych

etc

w ten sposob mozesz uzywac binanrych operator zeby srpawdzac prawa badz je modyfikowac - syzbko latwo i przyjemnie


2) osobna tableka na uprawnienia
id_usera, nr_uprawnienia

a uprawnienia (opisy) trzymasz np w osobnej tabelce

daelce odradzam trzymanie tego wszystkiego w jednym stringu - niewydajne i tylko utrudniajce prace wg mnie.
itsme
Opis problemu:
Potrzebny jest skrypt, który będzie zarządzał uprawnieniami użytkowników w systemie.

Założenia:
użytkownik będzie mógł należeć do wielu grup
grupy mogą być samodzielne i nadrzędne lub podrzędne
grupy podrzędne winny dziedziczyć wszystkie uprawnienia grupy nadrzędnej, uprawnienia nie mogą być większe od grupy nadrzędnej
użytkownik, który nie należy do żadnej grupy nie ma żadnych uprawnień
wykaz uprawnień: dodawanie, usuwanie, zmienianie, odczytywanie
poszczególne grupy mają możliwość działania (dodawanie, usuwanie, zmienianie, odczytywanie) w poszczególnych działach strony

potrzebne tabele:
user; id, login
user_grupa ; id_user, id_grupa
grupa ; id, nazwa, grupa_nadrzedna
grupa_zespol_uprawnien; id_grupa, id_uprawnienia_zespolu
uprawnienia_zespol ; id, nazwa, id_uprawnien
uprawnienia ; id, nazwa, liczba
dzialy_strony ; id, nazwa
dzialy_strony_grupa ; id_dzialy_strony, id_grupy

oczywiście można to wszystko skrócić do:
user ; id, ;, login
user_grupa ; id_user, id_grupa
grupa ; id, nazwa, grupa_nadrzedna
grupa_zespol_uprawnien ; id_grupa, id_uprawnienia_zespolu
uprawnienia_zespol ; id, nazwa, liczba ; gdzie 1=odczytanie, 2=dodawanie i 1, 3=zmienianie i 2, 4=usuwanie i 3
dzialy_strony ; id, nazwa
dzialy_strony_grupa ; id_dzialy_strony, id_grupy

opis systemu:
Masz działy news, artykuły, download, administracja stroną; .
Tworzysz grupy np. AMIN (4 ; uprawnienia), Moderator (4), gość(1), ;.
Następnie podczepiasz grupy pod działy i za każdym razem, gdy otwierasz stronę sprawdzany jest dział oraz zakres uprawnień dla grupy.

Jestem ciekaw opinii.

Dajcie chociaz znac czy dobrze mysle:(
dragossani
Cytat
kolejne uprawnienia to kolejna potega 2
To jest rozwiązanie zaczerpnięte z phpLib. Moim zdaniem sprawdza się tylko na krótką metę. Ile możesz mieć w tym układzie poziomów uprawnień? To jest rozwiązanie efektywne dla bazy i wydajności ale mało elastyczne. Problem od którego zaczął się topic jest dość dużego kalibru - taka metoda może się nie sprawdzić. Moim zdaniem jeśli już się na czymś wzorować, jeśli chodzi o system uprawnień to na perm_container z LiveUser.

Features of Perm container:[list]Every Application may contain an unlimited amount of Areas.
[*]Every Area may contain an unlimited amount of Rights.
[*]Every Right may be given to any Person or Group.
[*]Every Right may imply another Right.
[*]Every Right may have a "Scope" that limits the scope of the right to Users or Admins
[*]Every Right may have Levels* (for example Level do not make sense for a right like "new", so this is optional): [list]Level 1: Person may only apply this right to "Objects" he owns
[*]Level 2: Person may only apply this right to "Objects" that he owns, that one of his groups own or that someone owns that is in a group in which the person is also a member
[*]Level 3: Person may apply this right to all "Ojects"[list]Every Person may be either of Type User or Type Admin.
[*]Every User may have any of the following special levels:[list]Areauser (Has all rights in a given Area that a user may have)
[*]Superuser (Has all rights that a user may have)[list]Areaadmin (Has all rights in a given Area that a admin may have)
[*]Superadmin (Has all rights that a admin may have, except administrating Masteradmins)
[*]Masteradmin (Has all rights that a admin may have)[list]Every Group may have subgroups that may span an infinately deep tree.
[*]* To take advantage of the Levelsystem you have to store ownership of all "Objects" to which you want to control access via LiveUser.
[*]Multi-Language capable (right names and descriptions can be stored in multiple languages for easy integration into multilingual administration GUIs)[list]
freyman
A może spróbuj podzielić sobie parametry na "stopnie wtajeniczenia" - jeżeli gość ma poziom 1, to ma dostęp do a b c d, jak ma stopień 2, to dodatkowo ma jeszcze e i f, itd.

Nie wiem czy u ciebie da się tak zrobić, ale ja zrobiłem taką rzecz u siebie i okazało się po prostu małe miki - potem mogłem zmieniać użytkownikom poziom w zależności od zasług, stażu na serwisie, itp.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.