Czy ktoś ma jakieś sugestie dotyczące dobrej metodologii egzekwowania autoryzacji na poziomie rekordów przy zachowaniu rozdziału problemów w witrynie sieci Web ASP.Net MVC?Najlepsza praktyka w zakresie autoryzacji na poziomie rekordów MVC/ASP.Net
Z PrincipalPermission, można ozdobić metodę z:
PrincipalPermission(SecurityAction.Demand, Role = "GroupLeader")
wymagać, aby każdy użytkownik tej strony być członkiem stałej roli „GroupLeader”.
Alternatywnie, można ozdobić metodę z:
[ClaimsPrincipalPermission(SecurityAction.Demand, Operation = "Manage", Resource = "Group")]
wymagać, aby każdy użytkownik tej strony wolno rodzajowo do zarządzania grupą.
Jednak żadna z nich nie odnosi się do scenariusza, w którym użytkownik może mieć uprawnienia do edycji niektórych grup, ale nie do innych. O ile mogę powiedzieć, nawet jeśli implementuję niestandardowy ClaimsAuthorizationManager
, nie ma sposobu na uzyskanie dostępu do parametrów metody w celu dokonania warunkowej autoryzacji. Ponadto, obie powyższe metody po prostu rzucają SecurityException
, jeśli użytkownik nie ma dostępu, zamiast pozwalać, aby metoda z wdziękiem przekierowała użytkownika na stronę wyjaśniającą, co się stało i co może zrobić, aby uzyskać niezbędną autoryzację. .
Oczywiście, zdaję sobie również sprawę, że mógłbym po prostu zakodować logikę autoryzacji w samej metodzie i odpowiednio przekierować, ale wolałbym oddzielić to, jeśli to możliwe, i zachować kod metody czysty, aby obsłużyć tylko przetwarzanie żądania, a także aby móc pracować w ramach, która może być bardziej ogólnie stosowana.
Czy istnieje "gotowy do użycia" sposób radzenia sobie z tym scenariuszem, czy też muszę zaimplementować niestandardowy IAuthorizationFilter
? Myślę, że mógłbym obsłużyć zarówno autoryzację na poziomie rekordu, jak i wdzięczne przekierowanie, ale bez żadnych parametrów na poziomie metody, byłaby to w istocie ogromna instrukcja if ... else if
.
Nie ma nic poza wyrzuceniem z pudełka, ale nie powinieneś potrzebować gigantycznego 'if else'. W filtrze autoryzacji masz własne żądanie, więc możesz pobrać rzeczy z tego miejsca. – Shoe
Pytanie, które naprawdę zadajesz, brzmi: "Czy mogę wykonać operację na tym obiekcie?" W tej chwili szukam czegoś podobnego i nie znalazłem jeszcze dobrego rozwiązania. Zasadniczo, chcesz [Discretionary Access Controls] (http://en.wikipedia.org/wiki/Discretionary_access_control). Wikipedia to opisuje, ale jeszcze nie znalazłem konkretnego schematu programowania."Descretionary Access Control" brzmi jak odpowiedź, ale potrzebuję więcej badań, ponieważ koncentruje się głównie na zasobach systemowych (np. Systemie plików lub komputerze). –