Błąd w PrincipalPermission

0

Witam, zmagamy się z takim kłopotem. Napisałem swój własny system do uwierzytelniania, który sprawdza przesyłane dane, wyciąga informacje o użytkowniku, haśle i jego rolach z bazy danych a następnie tworzy obiekt w :

 
HttpContext.Current.User = new GenericPrincipal(new GenericIdentity(username),roles);

(dla uproszczenia załóżmy, że są dwie role : read i write, nasz username posiada tylko read

Następnie jeśli w jakimś miejscu wywołam np. controller
wywołam :

bool checkOne = HttpContext.Current.User.IsInRole("read"); // zwróci true
bool checkTwo = HttpContext.Current.User.IsInRole("write"); // zwróci false

Czyli wszystko działa, jednakże jeśli chcę dodać nad metodą w kontrolerze atrybut :

 [PrincipalPermission(SecurityAction.Demand, Role="read")]

dostaję SecurityException

W sumie na msdn nie znalazłem czy PrincipalPremission pobierane dane z contextu, ale jeśli nie stąd, to skąd ? :>

0

Atrybut sprawdza obiekt IPrincipal jaki jest ustawiony dla wątku wywołującego metodę (poczytaj o ExecutionContext).

Ustaw swoj GenericPrincipal dla Thread.CurrentPrincipal bodajże

0

Tak jak napisałeś, PrincipalPermission pobiera IPrincipal nie z Current Context, a z Thread.CurrentPrincipal.
Kłopot jest tylko taki, że gdy używam mojej klasy odpowiedzialnej za Authorize / Authenticate, dziedziczącej z IHttpModule i w niej ustawię Thread.CurrentPrincipal, to i tak metoda z klasy z service go nie widzi, a wartości z Thread.CurrentThread.ManagedThreadId są inne. Nie mogę się również z moje klasy Autoryzującej odwołać do wątku z Service, gdyż on jeszcze nie istnieje.

Prawdopodobnie ominę ten "kłopot" poprzez zrobienie osobnej klasy i z jakąś statyczną metoda walidującą albo stworzę swój atrybut.

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