Tjena All kod som du lägger i an aspx sida finns enbart tillgängliga under sidan, om du inte lagrar undan data i Session, Cache eller Application. TjenaPage.User är read-only men ej Context.User
När en person loggar in på min sajt vill jag koppla en del roller till användaren:
Page.User = new GenericPrincipal(User.Identity, aRoles)
Men Page.User är tydligen read-only. Så jag prövade med Context.User:
Context.User = new GenericPrincipal(User.Identity, aRoles)
men den verkar bara sträcka sig inom den egna sidan och gäller inte i andra aspx-sidor.
Vad göra?Sv: Page.User är read-only men ej Context.User
Det finns ett sätt som jag tycker är bäst och det är att sätta context i Global.asax under eventet Application_AuthenticateRequest. Varje gång någon requestar en sida så kommer eventet Application_AuthenticateRequest att köras. Detta görs när en användare ska identifieras, vilket görs i princip jämt. Global.asax och aspx sidor ingår i samma context. Global.asax körs alltid innan en aspx sida.
Så du skulle kunna göra liknande i Global.asax:
<code>
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if( Request.IsAuthenticated ) //Är användaren inloggad
{
//Hämta användarens roller, tex i från en krypterad formauthentication ticket
//som lagras i en cookie första gången en användare loggar in. Sedan
//för att slippa tex hämta roller från en databas så hämtas dom från cookien
//de resterande gångerna. Detta ökar prestandan.
Context.User = new GenericPrincipal(User.Identity, roles);
}
}
</code>
/Fredrik NSv: Page.User är read-only men ej Context.User
Jo, det är så jag tvingas göra nu, men prestandamässigt vore det guld om man slapp köra den rutinen innan varje request, eftersom jag kör en del loopar och annat i just den koden. Men tack i alla fall.