asp.net mvc 5 - rolemanager - Uso de User.IsInRole() en una vista
rolemanager asp net identity (2)
Puede escribir su propio método de extensión y usarlo en su código.
public static class PrincipalExtensions
{
public static bool IsInAllRoles(this IPrincipal principal, params string[] roles)
{
return roles.All(r => principal.IsInRole(r));
}
public static bool IsInAnyRoles(this IPrincipal principal, params string[] roles)
{
return roles.Any(r => principal.IsInRole(r));
}
}
Ahora simplemente puede llamar a este método de extensión así:
// user must be assign to all of the roles
if(User.IsInAllRoles("Admin","Manager","YetOtherRole"))
{
// do something
}
// one of the roles sufficient
if(User.IsInAnyRoles("Admin","Manager","YetOtherRole"))
{
// do something
}
Si bien puede usar estos métodos de extensión en las vistas también, intente evitar escribir la lógica de las aplicaciones en las vistas tanto como sea posible, ya que las vistas no se pueden probar con facilidad.
En mi proyecto de mvc5 para deshabilitar un enlace de acción para usuarios no autorizados me gustó esto
@if (User.IsInRole("Admin") | User.IsInRole("Manager"))
{
@Html.ActionLink("Add New Record", "ProductTypeIndex", "ProductType")
}
Pero si hay muchos roles para verificar, entonces @if () se alarga. ¿Cómo evitar esto? ¿Necesito ayudantes personalizados para esto? De ser así, ¿cómo puedo abordarlo? Ayuda apreciada ..
<% if (Page.User.IsInRole("Admin")){ %>