Czy dobrze zaprojektowałem schemat uprawnień

0

W swojej aplikacji chcę zrobić autoryzację. Aby użytkownik uzyskał dostęp do pewnych części najpierw będzie sprawdzane, czy ma do niej dostęp.

W pewnym miejscu wystarczy, by użytkownik będzie miał dostęp do Sklep -> Zamówienia -> Wyświetlanie. W innym miejscu będzie to Magazyn -> Monitoring -> Edycja Itd. Każdy moduł będzie mieć Wyświetlanie, Edycja, Usuwanie, Zmiana. Niektóre oprócz tego będą mieć osobne części jak np. Export do CSV.

Tak wygląda schemat bazy:
Schemat bazy danych

Tak wyglądałaby zawartość bazy danych:

dbo.User

Id Name
1 Adam

dbo.Module

Id Name ParentModuleId
1 Shop null
2 Site null
3 Programs null
4 Admin Panel 2
5 Modetator Panel 2
6 Products 5

dbo.UserModule

Id UserId ModuleId
1 1 6

dbo.Permission

Id Name
1 Create
2 Read
3 Update
4 Delete
5 Export Csv
6 Import Csv

dbo.UserModulePermission

Id UserModuleId PermissionId
1 1 5

W tym przypadku, użytkownik Adam ma prawo do eksportowania csv w module Site/Moderator Panel/Products.

Aby sprawdzić, czy użytkownik ma uprawnienia, będę potrzebował metody:
HasPermission(int userId, string modules, string action).

A to przykładowe użycie:
bool hasPermission = HasPermission(user.id, "Site/Moderator Panel/Products", "Export Csv");

Co o tym sądzicie? Jest ok?

1

Nie robi się uprawnień na usera, tylko na grupy. W grupie może być tylko jeden user.

0

czy uprawnienie update oznacza też uprawnienie do read, czy musi mieć w bazie oba żeby coś zedytować?

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