Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Tabela dla systemu uprawnień
Forum PHP.pl > Forum > Przedszkole
Fred1485
Witajcie,

O ile w samym PHP prosty system grup i uprawnień to nie problem to kombinuję jaka powinna być najlepsze struktura tabeli.
Hmm myślałem o dwóch sposobach, w pierwszym stworzyłbym tabelę groups gdzie trzymałbym dane o wszystkich grupach, w tabeli users_groups łączyłbym id użytkowników z id grupy. To działałoby fajnie ale mając na uwadzę grupy podstawowe czyli administrator i moderator nie lepiej w tabeli użytkownicy dodać kolumnę level i tam np 3 dla admina 2 dla moderatora 1 dla użytkownika itd?
Niby pierwszy i drugi mają prawo istnieć, jak wy taki problem byście rozwiązali?
ctom
może tak ?

Kod
T: users
    id, ....

T: roles
    id, name

T: permissions
    id, name


T: role_has_permissin
    roleId, permissionId

T: user_has_role
    userId, roleId
Fred1485
no to jest rozwiązanie, jak widać uprawnienia dałeś osobno niż przynależność do rangi. A jakby to scalić?
ctom
Cytat(Fred1485 @ 25.07.2015, 19:03:22 ) *
no to jest rozwiązanie, jak widać uprawnienia dałeś osobno niż przynależność do rangi. A jakby to scalić?


To zalezy od Ciebie jakie sobie uprawnienia zakładasz w aplikacji,

jeżeli będziesz w aplikacji posługiwał się tylko "rolami" to z "uprawnień" możesz zrezygnować.
Ale jak np. w jakiejś akcji założysz, że może ja wykonać usera w prawami do zapisu to jeżeli w danej roli nie jest zawarte to uprawnienie to user nie będzie miał do niej dostępu.
Oparcie się na uprawnieniach niż na rolach daje większe możliwości zarządzania dostępem do danych akcji. Bo po jakimś czasie przyjdzie Ci dodać rolę "młodszy admin" który będzie mógł coś tam robić ... to wystarczy, że jego rola będzie zawierała odpowiednie uprawnienia , a w kodzie aplikacji nie musisz zmieniać nawet znaku.
Fred1485
Nie mi chodzi tylko o proste sprawdzanie po tzw randze tak jak to jest w phpbb czy php zmodyfikowane przez przema wink.gif
viking
Zobacz jakąś acl-ke np zenda, będziesz miał podgląd jak to może wyglądać. Tu nie ma reguły bo zawsze są inne wymagania.
Fred1485
zaczęliśmy na mysql a skończymy na frameworku biggrin.gif
viking
Raczej chodziło o to żebyś sobie poczytal jak to jest zrobione i nie odgrywał koła na nowo.
Fred1485
Dobra już cos mam zastanawia mnie jeszcze tylko jesna sprawa. Jezeli będzie dużo grup i poszczególne będą mieć dostęp do np tematow na forum ale jednocześnie moderator i administrator zawsze powinni miec dostęp nawet jesli do tej grupy nie należą. Sprawdzać czy user jest moderatorem i dodac w warunku?
ctom
Cytat(Fred1485 @ 26.07.2015, 09:14:38 ) *
. Jezeli będzie dużo grup i poszczególne będą mieć dostęp do np tematow na forum ale jednocześnie moderator i administrator zawsze powinni miec dostęp nawet jesli do tej grupy nie należą. Sprawdzać czy user jest moderatorem i dodac w warunku?


widzisz teraz analogię do mojej wcześniejszej wypowiedzi questionmark.gif

sprawdzasz tylko czy "user możesz przeglądać tematy" ( tzn. czy jego Rola zawiera takie Uprawnienie) ... i wtedy nie ma znaczenia czy jest to moderator, administrator czy ktoś tam
Fred1485
No ok ale jak to wszystko potem pogodzić żeby się nie pogubić. Mam załóżmy jakieś tam grupy i nie mam jeszcze ich uprawnień bo uprawnienia zakładam dopiero podczas np nowgo tematu czy coś. Wklepię do bazy że to forum dla tej grupy należy i żadna inna do niej dostępu nie ma, ale z drugiej strony moderator zawsze tam może wejść, podczas zakładania tematu tylko dane o jednej grupie bym zapisywał.
Chyba że źle kombinuję biggrin.gif
ctom
nie wiem czy do końca się rozumiemy, bo ja z założenia najpierw wiem jakie są lub powinny być uprawnienia a kwestia nazw roli jest drugorzędna .... bo zawsze mogę z danej roli usunąć to uprawnienie

np.
uprawnienia:
moze-listowac-wpisy
moze-edytowac-wpisy
moze-usuwac-wpisy


i teraz gdy masz wykonać jakąś akcje to w logice sprawdzasz coś w ten deseń :
Kod
if( ! $user->can( 'moze-usuwac-wpisy' ) ) throw new Exception('brak uprawnień');


role zawsze możesz zrobić nowe lub edytować jej uprawnienia potem przypisać ją danemu Userowi - i jest bez znaczenia czy jest to Admin czy Admin12 bo możesz zarządzać dostępem jak chcesz. A gdy zamkniesz się , że Rola jest wyznacznikiem dostępu to co zrobisz gdy będziesz chciał odebrać jednemu userowi część praw Administratora ? - bo przecież nie będziesz mógł dodać roli "młodszy-admin" bez zmian w kodzie
Fred1485
Tak dokładnie o to chodzi mam z góry ustalone np usuwanie modyfikowanie dodawanie. Ale takie uprawnienia muszą być osobno dla kazdej kategorii forum. Podczas tworzenia kategorii jedna moze miec inne uprawnienia dla poszczegolnej grupy niz druga.
ctom
Cytat(Fred1485 @ 26.07.2015, 11:58:50 ) *
Podczas tworzenia kategorii jedna moze miec inne uprawnienia dla poszczegolnej grupy niz druga.


myśl w drugą stronę .... kto i jaki może mieć dostęp do "kategorii" a konkretnie jakie uprawnienie pozwala na jaką czynność "na danej kategorii"

Pamiętaj też o fakcie jaki już było tu wspomniany - każdy projekt ma inne wymagania.
Bo może w Twoim przypadku uprawnienia/role można spłaszczyć... bo jeżeli zakładasz skończoną ilość tych kategorii i uprawnień dla danego usera to powyższe moje sugestie mogą  się okazać over engineered.
Fred1485
No np w bazie trzymam info jaka grupa jest moderatorem kategorii kto moze pisac tam tematy kto edytować a kto moderowac itp.
ctom
no i OK - jeżeli takie rozwiązanie wyczerpuje potrzeby dla projektu to idź tą drogą. Nie martw się, że taki ja ma inną wizję najważniejsze byś spełnił założenia projektu.
Fred1485
zapuszczę się jeszcze w tabele od phpbb i od przema zobaczę co tam w trawie piszczy wink.gif
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.