1

J'ai mis mon menu à l'aide MVCSiteMap et j'ai ce nœud:MVCSiteMap Noeud Requring Rôles multiples

<mvcSiteMapNode title="Courses Form" controller="Booking" action="Course" roles="CORLIC, VIEWCOBO"/> 

J'essaie de faire respecter que ce nœud doit avoir des rôles « CORLIC » ET « VIEWCOBO » pour il est visible mais bien sûr cela signifie qu'il sera affiché si l'utilisateur a l'un des éléments ci-dessus.

Est-ce possible?

Merci.

Répondre

1

L'attribut roles est pour l'interopérabilité avec ASP.NET et ne doit pas être utilisé dans une application MVC uniquement. Pour MVC, si vous définissez déjà AuthorizeAttribute sur vos actions de contrôleur, MvcSiteMapProvider les récupère automatiquement et masque les nœuds correspondants en conséquence si security trimming est activé.

[Authorize] 
public ActionResult Course() 
{ 
    return View(); 
} 

[Authorize] 
[HttpPost] 
public ActionResult Course(CourseModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // Implementation omitted 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

La valeur par défaut AuthorizeAttribute accepte les rôles, mais il fonctionne de la même manière que les rôles attribuent - c'est un rôle que l'utilisateur est en lui fera réussir. Cependant, vous pouvez hériter AuthorizeAttribute vous-même et remplacer le IsAuthorized method pour modifier la logique si nécessaire. Ensuite, vous pouvez spécifier quels rôles sont requis en utilisant la nouvelle propriété.

[SpecialAuthorize(RequiredRoles = "CORLIC, VIEWCOBO")] 
public ActionResult Course() 
{ 
    return View(); 
} 

[SpecialAuthorize(RequiredRoles = "CORLIC, VIEWCOBO")] 
[HttpPost] 
public ActionResult Course(CourseModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // Implementation omitted 
    } 

    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

Une autre option possible est d'utiliser FluentSecurity comme shown here. Pour que FluentSecurity v2.0 fonctionne avec MvcSiteMapProvider, vous devez copier le HandleSecurityAttribute code dans votre projet et le modifier pour hériter de AuthorizeAttribute au lieu de Attribute, puis l'utiliser comme spécifié dans la documentation de FluentSecurity.

Questions connexes