W swojej aplikacji chcę blokować dostęp użytkownikom do pewnych części. Uprawnienia trzymam więc w bazie danych i gdy trzeba, to sprawdzam, czy dany użytkownik powinien mieć dostęp do danej funkcjonalności.
Początkowo wyglądało to tak, że każdy użytkownik mógł być przypisany do grupy, która miała określone uprawnienia. Grupy to np.:
Admin
Moderator
Użytkownik
Gość
Baza wyglądała tak:
I działa to prawidłowo. Tworzę sobię uprawnienie Display
o kategorii History
. Tworzę grupę Moderator
, której dodaję takie uprawnienie. Jeśli teraz przypiszę użytkownika do grupy Moderator
będzie on mógł teraz wyświetlać historie.
Problem pojawia się, gdy chciałbym, by użytkownik miał przypisaną grupę z uprawnieniami lub miał oddzielne uprawnienia, niezależne od grupy. Nie wiem w którym miejscu to zaimplementować.
Uprawnienia użytkownika wyglądałyby tak samo jak tabela GroupPermission
. Może więc zrobić tak, że uprawnienia użytkownika będą jako grupa w tabeli Group
, ale do tej tabeli dodam kolumnę OwnerId
. Grupy ogólne nie będą miały właściciela, natomiast grupa pojedyńczego użytkownika będzie posiadała jego Id.
Na ten moment mam osobne tabele do uprawnień grupy i uprawnień użytkownika (mimo, że praktycznie identyczne). Jeśli użytkownikowi chcę dać customowe uprawnienia, to muszę zadbać o to, by usunąć mu GroupId
. Jeśli natomiast użytkownika przypisuję do grupy, to muszę zadbać o to, by usunąć mu wszystkie uprawnienia customowe.
Czy takie rozwiązanie jest ok? Jak byście to widzieli?