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:
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?