working tag route not net mvc form for data asp all asp.net .net asp.net-mvc authorization windows-authentication

tag - Cómo mostrar u ocultar controles basados en roles-ASP.NET MVC 4 Razor



select asp-for (3)

He hecho algo parecido. La forma en que lo hice (puede que no sea la mejor)

es enviar un booleano de vuelta a la vista

en el uso del controlador:

bool showSection1 = true; bool showSection2 = false; ViewData["showSection1"] = showSection1; ViewData["showSection2"] = showSection2; /// may be better to use a viewmodel here rather than ViewData

Luego en la vista:

@if((bool)ViewData["showSection1"]) { @{Html.RenderPartial("section1");} } @if((bool)ViewData["showSection2")) { @{Html.RenderPartial("Section2");} }

Tendrá que hacer la lógica para configurar el booleano de la forma que desee, pero esto debería ser un comienzo.

También puede crear un método estático que devuelva el rol y luego obtener ese valor directamente de la vista. Sin embargo, esto puede ser una mala forma.

@if(AppHelper.GetRole().equals("role1")){ //show the partial }

luego cree una clase llamada AppHelper y un método llamado GetRole que devuelve el rol del usuario.

Estoy trabajando en la aplicación MVC 4 de ASP.NET. Tengo un panel y mis grupos de usuarios se basarán en el dominio de Windows, por lo que estoy usando la autenticación de Windows para autenticar a los usuarios. Creé aplicaciones de ejemplo que utilizan autenticación personalizada mediante funciones de reemplazo AuthorizeAttribute, ActionFilterAttribute. ¿Es este un buen enfoque?

  1. ¿Qué atributo se utiliza mejor para la autenticación?

Tengo un tablero de mandos. Así que necesito mostrar u ocultar los controles basados ​​en roles. Supongamos que si hay 3 cuadrículas (tabla), si Admin está conectado, puede ver 3 cuadrículas (tablas). Pero si el usuario de soporte está conectado, solo puede ver 2 cuadrículas (tabla).

Mi plan es crear vistas parciales para cada cuadrícula y así habrá una Acción y un Controlador para cada vista parcial. Habrá una base de datos y en eso especificaré las acciones que cada grupo puede realizar. Para que pueda filtrar las solicitudes.

2 ¿Cómo puedo ocultar o mostrar las vistas parciales basadas en roles?

Probé algunos enlaces SO, pero todos están hablando de 2,3 roles y fue codificado. En mi caso, los roles pueden variar y usamos db para configurar el acceso a los roles.

Gracias por adelantado.


Normalmente, desearía mantener sus vistas lo más limpias posible con poca o ninguna lógica. Sugeriría mover su lógica de verificación de roles a una acción del controlador y presentar una vista parcial basada en el rol de los usuarios.

Puede usar ChildActions y el método de extensión Html.Action para hacer esto conectado.

Desde MSDN:

Un método de acción secundario representa el marcado HTML en línea para parte de una vista en lugar de representar una vista completa. Cualquier método que esté marcado con ChildActionOnlyAttribute se puede llamar solo con los métodos de extensión Action o RenderAction HTML.

En su proyecto, cree un nuevo Controlador llamado Panel de control y agregue una única Acción llamada BuildTable .

public class DashboardController : Controller { [ChildActionOnly] public ActionResult BuildTable() { if (Roles.IsUserInRole("Administrator")) { return PartialView("_AdminTable"); } return PartialView("_SupportTable"); } }

Incluya la siguiente línea en la vista donde desea que aparezca la tabla del panel.

@Html.Action("BuildTable", "Dashboard")


Puede usar el siguiente código para la verificación basada en roles

@if(Request.IsAuthenticated) { if(User.IsInRole("Admin")) { <Ul Class="SubMenuItem"> <li> this menu item is for Admin role</li> </Ul> } if(User.IsInRole("User")) { <Ul Class="SubMenuItem"> <li> this menu item is for User role</li> </Ul> } } @* For unknown user *@ else { <Ul Class="SubMenuItem"> <li> this menu item is for Unknown user</li> </Ul> }