![]() |
![]() |
![]()
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 (IMG:http://forum.php.pl/style_emoticons/default/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? |
|
|
![]() |
![]()
Post
#2
|
|
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] |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 16:03 |