Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Kontrola dostepu na poziomie zasobow - jak najlepiej przechowywac uprawnienia w bazie?, Kwestia wydajnosci
c2h5oh
post
Post #1





Grupa: Zarejestrowani
Postów: 29
Pomógł: 1
Dołączył: 6.10.2006

Ostrzeżenie: (0%)
-----


Mam zaplanowany mechanizm kontroli dostepu do zasobow w CMSie opierajacy sie na tej samej idei co dostep do plikow w systemach unixowych - grupy + userzy, uprawnienia moga byc przypisane do grupy i do usera, user moze byc czlonkiem dowolnej liczby grup itd.

Problem jak to przechowywac w bazie, zeby byl mozliwy wydajny dostep do tych danych.
poki co mam tabele zawierajace odpowiednio uzyszkodnikow, grupy i przynaleznosc uzyszkodnikow do grup (uzutkownik moze byc w wielu grupach, wielu uzytkownikow moze byc w jednej grupie), do tego tabela zawierajaca zasoby.

Pierwszym rozwiazaniem jakie przychodzi do glowy to 2 dodatkowe tabele - jedna zawierajaca zestaw zasob-uprawnienia-idUprawnien, druga idUsera/idGrupy-idUprawnien, alternatywnie jedna tabela laczace te dwie, ale wtedy niepotrzebnie powielamy uprawnienia. Proste jak budowa cepa i rownie niewydajne co to narzedzie ;-)

To rozwiazanie wydaje sie wiecej niz wystarczajace, gdyby ograniczyc jego stosowanie do mało obciażonego backendu - spadek wydajnosci serwisu jako calosci bylby minimalny. Nie przejdzie jednak, gdyby chciec je zastosowac przy frontendzie i jednoczesnie traktowac publikowane tresci w kategorii zasobu - doszloby za duzo zapytan do bazy.

Co proponujecie jako alternatywe z zachowaniem funkcjonalnosci? Jedyne co dotychczas wymyslilem to sztuczne wydzielenie kilku(nastu) najpopularniejszych grup (anonymous, registered, premium user,..., extra privileges), ktorych uprawnienia beda przechowywane w tabeli zasobow i odwolywanie sie do wczesniej opisanej struktury odbywaloby sie jedynie przy stwierdzeniu usertype == extra privileges.

Czy znacie/mozecie zaproponowac jakies lepsze rozwiazanie?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Zbłąkany
post
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

Ostrzeżenie: (0%)
-----


Nie bądź śmieszny (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) przy takiej ilości danych to nawet SQLite sobie poradzi bez większego problemu (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) , no chyba, że tak mizernie zaprojektujesz bazę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) .
Najprostszy przykład:

users: id,login,pass
actions: id,name
groups: id,name
actions_in_groups: id,group_id,action_id
users_in_groups: id,user_id,group_id
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 22:36