ASP.NET MVC 4 custom Authorize attribute - jak przekierować nieautoryzowanych użytkowników na stronę błędu? [duplikat]

To pytanie ma już odpowiedź tutaj:

Używam niestandardowego atrybutu authorize, aby autoryzować dostęp użytkowników na podstawie ich poziomów uprawnień. Muszę przekierować nieautoryzowanych użytkowników (np. użytkownik próbuje usunąć fakturę bez poziomu Delete acess), aby uzyskać dostęp odmowny strona.

Atrybut niestandardowy działa. Ale w przypadku nieautoryzowanego dostępu użytkownika, nic nie pokazano w przeglądarce.

Kod Contollera.

public class InvoiceController : Controller
{
    [AuthorizeUser(AccessLevel = "Create")]
    public ActionResult CreateNewInvoice()
    {
        //...

        return View();
    }

    [AuthorizeUser(AccessLevel = "Delete")]
    public ActionResult DeleteInvoice(...)
    {
        //...

        return View();
    }

    // more codes/ methods etc.
}

Własny kod klasy atrybutów.

public class AuthorizeUserAttribute : AuthorizeAttribute
{
    // Custom property
    public string AccessLevel { get; set; }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthorized = base.AuthorizeCore(httpContext);
        if (!isAuthorized)
        {                
            return false;
        }

        string privilegeLevels = string.Join("", GetUserRights(httpContext.User.Identity.Name.ToString())); // Call another method to get rights of the user from DB

        if (privilegeLevels.Contains(this.AccessLevel))
        {
            return true;
        }
        else
        {
            return false;
        }            
    }
}

Doceniam, jeśli możesz podzielić się swoim doświadczeniem w tej sprawie.

Author: chatura, 2012-11-08

1 answers

Musisz nadpisać {[1] } Jak określono TUTAJ .

public class CustomAuthorize: AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        if(!filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
            base.HandleUnauthorizedRequest(filterContext);
        }
        else
        {
            filterContext.Result = new RedirectToRouteResult(new
            RouteValueDictionary(new{ controller = "Error", action = "AccessDenied" }));
        }
    }
}

**Uwaga: zaktualizowana Instrukcja warunkowa Jan '16

 64
Author: VJAI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-08 14:21:27