System zadań - system uprawnień

0

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

0

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).

0

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]

1 użytkowników online, w tym zalogowanych: 0, gości: 1