7
votes

Rôle personnalisé ASP .NET Profitez de la cacherolesInicie = "vrai"

J'ai mis en place un fournisseur de rôle personnalisé et le configuré dans mon fichier web.config similaire à celui-ci: xxx

J'ai remplacé la fonction getrolesForUser dans mon fournisseur de rôle personnalisé, et je «Je suis entré dessus, et cela fonctionne simplement bien - charge 60 rôles pour l'utilisateur que je teste. Cependant, j'ai remarqué que les getdrolesforuser se font appeler sur chaque demande qui appelle l'utilisateur.Isincrole. Dans d'autres applications que j'ai écrites, cela ne l'appelle qu'une seule fois, puis cache le résultat dans le cookie. Pour une raison quelconque, la mise en cache ne fonctionne pas pour cette application. Des idées sur pourquoi?


0 commentaires

3 Réponses :


1
votes

même est vrai pour moi. Il continue à appeler getrolesforuser ()


0 commentaires

3
votes

https://web.archive.org/web/20101123220352/http://connect.microsoft.com/visualstudio/feedback/details/104688/rolemanager-cacherolesincie-Option-Does-not -work

"La question du moment où le cache (ou non le cache) dans le rôleprincipal a traversé un certain nombre de itérations de conception et nous ne sommes enfin installés à la mise en cache pour la méthode exposée par l'interface Iprincipale (c'est-à-dire Isinrole)."


2 commentaires

Alors, quel serait une meilleure façon de faire cela? Je veux que les rôles se cachent dans le cookie.


Essai et erreurs et choisissez soigneusement les méthodes à utiliser, je suppose.



3
votes

J'avais le même problème. Dans mon cas, le problème était que je fixais un contexte. Donc, au lieu de: xxx pré>

ceci corrigé pour moi: p> xxx pré>

la isvalidauthutcookie em> méthode vérifie la méthode de Null et vide : P>

    private void SaveRoleCookie(RolePrincipal rp, AuthenticationContext filterContext)
    {
        string s = rp.ToEncryptedTicket();
        const int MAX_COOKIE_LENGTH = 4096;
        if (string.IsNullOrEmpty(s) || s.Length > MAX_COOKIE_LENGTH)
        {
            Roles.DeleteCookie();
        }
        else
        {
            HttpCookie cookie = new HttpCookie(Roles.CookieName, s);
            cookie.HttpOnly = true;
            cookie.Path = Roles.CookiePath;
            cookie.Domain = Roles.Domain;
            if (Roles.CreatePersistentCookie)
                cookie.Expires = rp.ExpireDate;
            cookie.Secure = Roles.CookieRequireSSL;
            filterContext.HttpContext.Response.Cookies.Add(cookie);
        }
    }


2 commentaires

Je cherche des heures sur ce numéro et cela a réparé! Merci beaucoup d'avoir posté cela! Pouvez-vous répondre à une question, quelle est la référence pour la méthode isvalidauthcookie ou quelle classe est le code écrit dans cette méthode?


Merci cette réponse a beaucoup aidé. Ce n'est-il que la solution qui traite de la mise en cache ne fonctionne plus dans MVC 5 lorsque vous vous mettez en train de vous mettre en œuvre. Je mets ceci dans mon propre attribut d'autorisation à la place.