Cześć!
Od razu przepraszam jeśli nazwa wątku słabo obrazuje mój problem. Jeśli tylko ktoś wymyśli coś lepszego od razu podmienię :)
Mianowicie mam system zadań.
Całość opiera się na pojedynczych taskach, które to można dodać do projektu. Moim problemem jest trzymanie uprawnień do każdego z tasków.
Mógłbym zrobić to na zasadzie acl'a (przy tworzeniu taska tworzenie nowego zasobu a w nim poszczególnych akcji typu watch, edit, commit itd, itp) ale wydaje mi się że nie jest to najbardziej optymalne rozwiązanie.
Myślałem jeszcze nad bazą danych w stylu:
user_id, task_id, watch, edit, comit, ...
Ale takie rozwiązanie kompletnie mi się nie podoba, poza tym dodanie nowej akcji wymagałoby stworzenia w tabeli nowej kolumn co rodzi dodatkowe problemy (komu dać allow a komu disallow).
Co Waszym zdaniem powinienem użyć?
Pozdrawiam
NickOver
Tabela acl
z kolumnami id
, name
*
(np. can_edit
) plus tabela acl_task
z kolumnami id, user_id, task_id, acl_id
.
Ew. permission
zamiast acl
, jak kto woli :P.
*
oraz opcjonalnie np. entity_name
(wtedy przykładowe uprawnienie wyglądałoby task, can_edit
, zamiast samego can_edit
).
Jeśli chciałbyś mieć możliwość łatwego dodawania nowych akcji do uprawnień, to proponuję zbudować dwie tabele w bazie:
permission_action
- ta tabela miałaby charakter słownika akcji, jakie można wykonać z danym taskiem, tutaj może być nawet jedna kolumna, która jednocześnie będzie kluczem głównym: action
permission
- tutaj przechowywane byłyby już konkretne uprawnienia, kolumny: task_id
, action
(klucz obcy z tabeli słownikowej), user_id
.
Jeśli chciałbyś dodać nowy rodzaj akcji, wystarczy ją dodać do słownika i zbudować odpowiednie uprawnienia.
Jeszcze można by było się zastanowić nad zbudowaniem grup użytkowników, tak żeby nadawać uprawnienia dla grup, a nie dla konkretnych użytkowników :)
Dodam jeszcze do rozważań dwa pomysły :)
Pierwszym pomysłem jest skorzystanie z gotowego rozwiązania typu ACL, które pozwoli Ci ograniczyć dostęp do danego URL (np.: /task/{id}/edit). Po wpisaniu permission
w Packagista trochę wyników jest - być może coś będzie przydatne (można też poszukać po acl).
Drugim pomysłem jest, żeby przechowywać te uprawnienia w plikach .yml
- przy założeniu, że uprawnienia się raczej rzadko zmieniają i dotyczą nie tyle konkretnych tasków, ale raczej typów tasków.
[Adam]