Pregunta

Estoy tratando de agregar autorización para mis reguladores y no está funcionando ...

No estoy seguro de dónde buscar en mi programa, pero la adición de la

[Authorize] 

filtro en mi controlador no está funcionando, por no hablar de nada por el estilo

[Authorize(Roles = "Manager")]

he sido capaz de conseguir este trabajo en la aplicación predeterminada que se proporciona al crear un nuevo proyecto MVC (es decir, que soy capaz de hacer que la pestaña "Información" redirección a la pantalla de inicio de sesión si no estoy conectado) , por lo que supongo que he estropeado las cosas a lo largo de la manera como he construido mi aplicación. ¿Alguien sabe dónde debo mirar a solucionar este problema? Tengo usuarios y tienen papeles; Estoy usando el esquema de ASP.net que es auto-creado; He examinado mi archivo web.config arriba y hacia abajo y aunque estoy bastante nuevo en esto, nada parece estar fuera de lugar. No tengo ni idea de por qué mis filtros de autorización no están funcionando.?.

¿Fue útil?

Solución

Me escribió un atributo personalizado para resolver este problema. Se puede atribuir sus métodos de controlador de la siguiente manera:

[RequiresRole(Role="Admin")]
public ActionResult Index()
{
    int i = 5 + 5;

    return View();
}

El código para el atributo es la siguiente ....

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;

namespace Web.Controllers
{
    public class RequiresRoleAttribute : ActionFilterAttribute
    {
        public string Role { get; set; }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (string.IsNullOrEmpty(Role))
            {
                throw new InvalidOperationException("No role specified.");
            }

            string redirectOnSuccess = filterContext.HttpContext.Request.Url.AbsolutePath;
            string redirectUrl = string.Format("?returnUrl={0}", redirectOnSuccess);
            string loginUrl = FormsAuthentication.LoginUrl + redirectUrl;

            if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
            {
                filterContext.HttpContext.Response.Redirect(loginUrl, true);
            }
            else
            {
                bool isAuthorised = filterContext.HttpContext.User.IsInRole(this.Role);
                if (!isAuthorised)
                {                        
                    filterContext.HttpContext.Response.Redirect(loginUrl, true);
                }                
            }  
        }      
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top