2015-08-24 12 views
5

starałem się uczynić atrybut niestandardowy autoryzacji w ASP.NET vNext, aż znalazłem ten excelent odpowiedź od @blowdart w tym poście:parametry podaje do wymogiem/Polityka w ASP.NET MVC 6

https://stackoverflow.com/a/31465227/1756978

oznacza, że ​​obecnie należy przejść do wymagań dotyczących autoryzacji. Odpowiedź jest bardzo jasna, ale nie wskazuje, jak przekazać parametr do tych wymagań/zasad.

Co usiłuję zrobić jest przenoszenie do MVC 5 niestandardowy atrybut autoryzacji, który ma ten podpis:

[Autorizacion(Requires = enumPermission.DeleteCustomer)] 

ponieważ używam bardzo niestandardowy zestaw uprawnień odzwierciedlenie w backend/frontend/jako teksty stałe ciągi .

Ponieważ te funkcje nie są jeszcze udokumentowane, czuję się trochę zagubiony ... Czy ktoś mógłby udzielić wskazówek?

góry dzięki

Odpowiedz

0

Rzeczywiście, poczta @ blowdart jest bardzo wnikliwe i od mojego zrozumienia, klucz rzeczą do zrozumienia jest następujący: akt

udzielenie zezwolenia Tożsamości. Tożsamości są tworzone przez uwierzytelnienie .

Wygląda na to, że tożsamości są tworzone przez proces uwierzytelniania.

Następnie (jeśli chcesz) możesz rozpocząć proces autoryzacji. Oznacza to utworzenie niestandardowego authorization requirements, na który to wymaganie będzie patrzeć na te tożsamości i działać na nich.

W prostym języku angielskim, jest to, w co wierzę dzieje:

  1. Jak wspomniano w poście blowdart, powinniśmy mieć jakiś uwierzytelniania middleware, co dzieje się robić rzeczywiste uwierzytelniania . Po pomyślnym uwierzytelnieniu bierzesz wszystkie potrzebne informacje od tego teraz uwierzytelnionego użytkownika i tworzysz uwierzytelniony uwierzytelniony .

    Na przykład możemy przechowywać w tym ClaimsPrincipal, zestawy uprawnień użytkownika.

  2. Następnie podczas tworzenia authorization requirement spojrzeć na ClaimsPrincipal, rozpakować zestawy uprawnień z ClaimsPrincipal i podjąć odpowiednie działania na podstawie jakichkolwiek reguł biznesowych, które chcesz.

    Zakładając, że nie może przechowywać zestawy zgody na ClaimsPrincipal z jakiegoś powodu, można było łatwo przechowywać identyfikator użytkownika i od wewnątrz wymogu, przeczytaj ten userid z ClaimsPrincipal, powoływać się na bazę danych i dostać zestawy zezwoleń , a następnie działać zgodnie z nimi.

Wniosek:

Więc krótko mówiąc, nie sądzę, żeby ci przejścia rzeczy do wymogu (ów), myślę uzyskać je od wewnątrz ClaimsPrincipal.

W tym przykładzie można utworzyć wymaganie odczytujące wartość ClaimsPrincipal i porównać dowolną wartość z wartością Enum i podjąć odpowiednie działania.

Daj nam znać, co udało Ci się zrobić i czy działa.

A jeśli moje rozumienie jest błędne, a następnie przez wszystkich środków, nie krępuj się mnie poprawić, ponieważ to wszystko jest nowe rzeczy :-)

+1

Tak, jestem przechodzącej rzeczy do wymagań na ... roszczenie zawiera WSZYSTKIE uprawnienia użytkownika zaznaczone w tablicy bitowej skodyfikowanej w ciągu base64. W związku z tym muszę sprawdzić, czy udzielono konkretnego zezwolenia na filtr autoryzacji w danej akcji API, dlatego muszę przekazać to konkretne pozwolenie, które jest wybrane z wyliczenia mapowanego na poprzednią tablicę. W ten sposób mogę sprawdzić uprawnienia bardzo szybko, nie czytając bazy danych, i mam na nich intellisense, ponieważ są one częścią enum. To jest obecnie zaimplementowane w MVC 5 i działa jak urok. – Vi100

+0

@ Vi100 Obecnie pracuję nad projektem ASP.NET MVC 5, w którym chcę dynamicznie przydzielać role użytkowników do kontrolerów za pośrednictwem tabeli bazy danych. Czy mam rację, aby zrozumieć, że już to zostało zaimplementowane w aplikacji ASP.NET MVC 5? Jeśli tak, czy chcesz to udostępnić? Jeśli nie, proszę wskazać mi odpowiednią dokumentację użytą do opracowania rozwiązania? Wszelkie uwagi/pomoc są mile widziane! –

Powiązane problemy