
Zastanawiam się, którą implementację wybrać...
1. Definiujemy grupy admin i użytkownik. Każdej grupie przypisujemy zasoby, ale warunek jest taki, że admin musi mieć też uprawnienia użytkownika. Będzie to wyglądało mniej więcej tak:
Zasoby:
Kod
www/
www/contact
www/user/profile
www/logs/view
www/contact
www/user/profile
www/logs/view
Grupy:
użytkownik
admin
Role:
użytkownik:
Kod
www/
www/contact
www/user/profile
www/contact
www/user/profile
admin:
Kod
www/
www/contact
www/user/profile
www/logs/view
www/contact
www/user/profile
www/logs/view
Ten sposób jest strasznie zasobożerny ponieważ w bazie, w tabeli ról dużo zasobów będzie się powtarzać/pokrywać oraz użytkownikowi będzie można przypisać tylko jedną grupę. Przykładowo, jeżeli chcielibyśmy stworzyć sobie grupę moderator-bonus, która by miała dostęp do jednego zasobu więcej niż standardowy mod to musielibyśmy przypisać tej grupie prawa użytkownika, prawa moderatora i dopiero potem dodać ten jeden, bonusowy zasób.
2. Drugi sposób jest bardziej oszczędny.
Zasoby:
Kod
www/
www/contact
www/user/profile
www/logs/view
www/contact
www/user/profile
www/logs/view
Grupy:
użytkownik
admin
Role:
użytkownik:
Kod
www/
www/contact
www/user/profile
www/contact
www/user/profile
admin:
Kod
www/logs/view
Tym razem w tabela ról będzie znacznie mniejsza, dodanie jednego, bonusowego zasobu będzie sprowadzało się do utworzenia grupy moderator-bonus i przypisaniu jej tylko jednego zasobu, a użytkownikowi będzie można przypisać kilka grup.
Problem sprowadza się tutaj do sposobu przechowywania tego w bazie. Tabela user_acl_groups odpada ponieważ wielkością dorównywałaby (czasami przewyższała) ilość użytkowników, czyli to tak jakbyśmy mieli dwie tabele do użytkowników. Myślałem o czymś takim:
Kod
user_id | user_password | ... | user_acl_group
1 | test | ... | 1;2;3;4
2 | test2 | ... |1
3 | jurek | ... | 2;6;1
1 | test | ... | 1;2;3;4
2 | test2 | ... |1
3 | jurek | ... | 2;6;1
...czyli o utworzeniu kolumny, która przechowywałaby id grup (nie grupy!).
Uff, co o tym myślicie?
