Pregunta

Actualmente utilizo [Autorizar (Roles = ".....")] para asegurar mis acciones del controlador en mi aplicación ASP.NET MVC 1, y esto funciona bien. Sin embargo, ciertos puntos de vista de búsqueda, necesita tener botones que el camino a estas acciones que necesitan ser activado / desactivado basado en el registro seleccionado en la lista de búsqueda, y también los privs de seguridad del usuario conectado.

Por lo tanto creo que es necesario tener una clase para acceder a una tabla de base de datos, que las referencias cruzadas éstos controlador de destino / acciones con las funciones de aplicación para determinar el estado de estos botones. Esto, obviamente, hacer las cosas sucias que tendrán que ser mantenido en 2 lugares privs - en esa clase / tabla de base de datos y también en las acciones del controlador (más, si quiero cambiar el acceso a la acción que tendrá que cambiar el y compilar código en lugar de simplemente cambiar una entrada de la tabla DB).

Tu lugar ideal para extender la funcionalidad [Autorizar] para que en lugar de tener que especificar las funciones en el código [Autorizar], se consulta la clase de seguridad basado en el usuario, controlador y la acción y que le mostrará una boolean permitir o denegar el acceso. ¿Hay buenos artículos en este - No me puedo imaginar que es una cosa inusual que querer hacerlo, pero parecen estar luchando para encontrar nada sobre cómo hacerlo (podría ser el cerebro lunes por la mañana). He empezado un poco de código haciendo esto, mirando artículo http://schotime.net/blog/index.php/2009/02/17/custom-authorization-with-aspnet-mvc/ , y parece estar empezando fuera bien, pero me no puede encontrar la manera "correcta" para obtener los valores de regulación y de acción que llaman desde el HttpContext - lo que podía juzgar un poco de código para extraerlos de la solicitud de URL, pero eso no me parece correcto y me en lugar hacerlo correctamente.

Saludos

MH

¿Fue útil?

Solución

He encontrado esto en otro foro y así voy a publicar aquí por si alguien le resulta útil. Tenga en cuenta que la forma de hacer esto cambia dependiendo de si se está utilizando MVC 1 o 2

la clase que usted crea necesita para poner en práctica

public void OnAuthorization(AuthorizationContext filterContext)

y luego se puede utilizar

string controllerName = filterContext.RouteData.Values["controller"].ToString();

y el mismo, la sustitución de la "acción" para el "controlador" (asegúrese de comprobar por los nulos en estos valores en primer lugar). En MVC 2 esto se puede cambiar a filterContext.ActionDescriptor.ActionName y .ActionDescriptor.ControllerDescriptor.ControllerName y usted no tendrá que comprobar si hay valores nulos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top