Sono voler memorizzare nella cache i ruoli di un utente è in per ogni richiesta che viene in Ci sono molti posti in tutto ogni pagina dove dove abbiamo qualcosa di simile:Per-Richiesta dati statici in ASP.NET
<% if(Roles.IsUserInRole("RoleName")) {%>
<!-- Conditional Rendering -->
<% } else if(Roles.IsUserInRole("AnotherRole") {%>
<!-- You get the point -->
<% } %>
Poiché questo è tutto memorizzato in un database SQL, ognuna di queste richieste colpisce il database. So che ci sono modi per memorizzare nella cache i ruoli in un cookie, ma non voglio farlo. Ad ogni modo, quello che stavo pensando era qualcosa del genere.
public static class SecurityUtils
{
public static string[] UserRoles()
{
var context = HttpContext.Current;
if (context == null) return Enumerable.Empty<string>();
string[] roles;
roles = context.Items["UserRoles"] as string[];
if (roles == null)
{
roles = Roles.GetRolesForUser();
context.Items["UserRoles"] = roles;
}
return roles;
}
}
Chiunque veda eventuali problemi con questo? So che chiamare sempre a UserRoles()
cercherà l'oggetto nel contesto e forse questa non è la cosa più efficace da fare. Quello che voglio davvero sapere è se questo verrà memorizzato nella cache in base alle richieste, in modo che non vi siano sovrapposizioni con le richieste degli altri utenti.
Hai un manzo con 'Sessione'? – bzlm
@bzlm - forse i ruoli non sono "Serializzabili"? – Oded
@Oded Hai ragione. Forse 'stringa []' nell'esempio di codice nella domanda si riferisce ad arcobaleni e unicorni piuttosto che a sequenze di lettere e numeri. – bzlm