Je crée mon propre système d'adhésion et je ne veux rien avoir à faire avec le fournisseur d'adhésion MS. J'ai regardé sur Internet et ici sur StackOverflow mais tout ce que j'ai pu trouver était des fournisseurs d'adhésion construits au-dessus du fournisseur d'adhésion MS.
Quoi qu'il en soit, j'ai presque tout connecté maintenant, mais j'aimerais utiliser un attribut Authorize personnalisé qui utilise mon infrastructure d'adhésion. J'ai vérifié ce fil ici sur le site et j'essaie de faire quelque chose de similaire, mais je ne suis pas sûr que ce soit calme ce dont j'ai besoin. Jusqu'à présent, ce sont les classes que j'ai:
SessionManager:
public static class SessionManager : ISessionManager
{
public static void RegisterSession(string key, object obj)
{
System.Web.HttpContext.Current.Session[key] = obj;
}
public static void FreeSession(string key)
{
System.Web.HttpContext.Current.Session[key] = null;
}
public static bool CheckSession(string key)
{
if (System.Web.HttpContext.Current.Session[key] != null)
return true;
else
return false;
}
public static object ReturnSessionObject(string key)
{
if (CheckSession(key))
return System.Web.HttpContext.Current.Session[key];
else
return null;
}
}
SharweAuthorizeAttribute: ( je ne sais pas vraiment si c'est vraiment ce que je devrais faire)
public class SharweAuthorizeAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (SessionManager.CheckSession(SessionKeys.User) == true)
return true;
else
return false;
}
}
Voici maintenant ce dont j'ai besoin:
Je dois autoriser les utilisateurs en fonction de leurs rôles (en utilisant mon propre fournisseur de rôles), donc je ferais quelque chose comme:
[SharweAuthorize(Roles="MyRole")]
C'est tout, je suppose ... Toutes les suggestions sont les bienvenues :)
MISE À JOUR: Ok Je viens de relire cette page et j'ai trouvé la solution à la question numéro deux:
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (SessionManager.CheckSession(SessionKeys.User) == false)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "ActionName" },
{ "controller", "ControllerName" }
});
}
else
base.HandleUnauthorizedRequest(filterContext);
}
Faites-moi savoir si je l'ai bien fait s'il vous plaît ...
Oui, vous avez bien compris (IMO, il est plus sûr et plus simple d'implémenter un fournisseur d'adhésion personnalisé, mais c'est votre choix)
roles
de la classe de base AuthorizeAttribute
et vous vérifiez dans votre implémentation si l'utilisateur est dans le rôle.Edit: un peu plus sur la chose des rôles
si tu as
[SharweAuthorize(Roles="MyRole")]
vous pouvez ensuite vérifier la propriété Roles dans la méthode AuthorizeCore
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (SessionManager.CheckSession(SessionKeys.User) == true) {
if (SessionManager.CheckUserIsInRole( Roles )) // where Roles == "MyRole"
return true;
}
return false;
}