![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarząd Postów: 2 277 Pomógł: 6 Dołączył: 27.12.2002 Skąd: Wołów/Wrocław ![]() |
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 ![]() 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? -------------------- "Niezależnie od tego, jakie masz osiągnięcia, ktoś Ci pomaga..."
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 602 Pomógł: 0 Dołączył: -- Skąd: W - WA -> GRO Ostrzeżenie: (0%) ![]() ![]() |
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 :?: -------------------- Zanim zadasz pytanie, zawsze wczesniej zajrzyj do manuala ( pl.php.net/manual/pl/ ).
Szukasz skryptow - www.hotscripts.com |
|
|
![]()
Post
#3
|
|
![]() Grupa: Przyjaciele php.pl Postów: 786 Pomógł: 0 Dołączył: 18.03.2002 Skąd: Wroclaw/Warszawa Ostrzeżenie: (0%) ![]() ![]() |
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. -------------------- .. make web your home ..
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarząd Postów: 1 512 Pomógł: 2 Dołączył: 22.04.2002 Skąd: Koszalin ![]() |
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:( -------------------- brak sygnaturki rowniez jest sygnaturką
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 398 Pomógł: 0 Dołączył: -- Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
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] -------------------- cease this long, long rest / wake and risk a foul weakness to live / when it all comes down / watch the smoke and bury the past again / sit and think what will come / raise your fears and cast them all away
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 2 Pomógł: 0 Dołączył: 21.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 17.06.2025 - 03:26 |