Próbuję podążać za modelem kontroli dostępu opartym na rolach, aby ograniczyć to, co użytkownicy mogą lub nie mogą robić w moim systemie.
Do tej pory mam następujące podmioty:
users - Ludzie, którzy będą korzystać z systemu. Tutaj mam nazwy użytkownika i hasła. role - zbiór ról, które mogą mieć użytkownicy. Rzeczy takie jak zasoby menedżera, administratora itp. - Rzeczy, którymi użytkownicy mogą manipulować. Jak kontrakty, użytkowników, przeciągi kontraktowy itp operacje - rzeczy, które użytkownik może zrobić z zasobów. Jak tworzyć, czytać, aktualizować lub usuwać.
Teraz moje wątpliwości pojawiają się tutaj na schemacie, na którym mam taką relację:
operacje (0 .. *) są wykonywane na zasobach (0 .. *), które generują tabelę, którą nazwałem uprawnieniami, i która przechowuje operację i zasób .
Tabela uprawnień będzie wyglądać następująco (jeden wiersz): ID: 1, operacja: tworzenie, zasób: umowa.
Co oznacza uprawnienie do tworzenia się kontrakt .
Zrobiłem to w ten sposób, ponieważ uważam, że niektóre zasoby mogą nie mieć wszelkiego rodzaju operacji. Na przykład w celu zarejestrowania umów użytkownicy mogą przesyłać pliki , ale ta operacja nie jest dostępna w celu rejestracji dostawcy .
Dlatego teraz, gdy administrator będzie udzielał uprawnień do roli , nie będzie miał listy zasobów z każdą zarejestrowaną operacją w systemie.
Myślę, że każdy zasób ma własną kolekcję operacji, które można na nim wykonać.
Mogę wyjaśnić, czy coś nie jest zrozumiałe.
Czy to jest właściwy sposób na wdrożenie RBAC?
EDYTOWAĆ
Mam na myśli to, że mając tabelę uprawnień zawierającą operacje i zasoby , mam DWIE dodatkowe tabele, ponieważ chcę powiązać zasoby z operacjami . Mógłbym także zrobić zasoby, które mają uprawnienia, w których tabela uprawnień przechowywałaby uprawnienia.
Ale wtedy stałoby się tak, że niektóre uprawnienia, które nawet nie istnieją dla niektórych zasobów, pojawiałyby się, gdy administrator je przypisywał.
Więc chcę wiedzieć z punktu widzenia projektu bazy danych, czy to uprawnienie do tabeli, które ma operację na jednej kolumnie i inny zasób jest poprawne? Czy napotkam problemy, jeśli tak pozostanie?