Frage

Ich versuche Genehmigung meines Controller hinzuzufügen und es nicht funktioniert ...

Ich bin nicht sicher, wo in meinem Programm zu sehen, aber das Hinzufügen des

[Authorize] 

Filter in meinem Controller nicht funktionieren, geschweige denn etwas wie

[Authorize(Roles = "Manager")]

Ich habe in der Lage, diese Funktion in der Standard-Anwendung zu erhalten, die zur Verfügung gestellt wird, wenn ein neues MVC-Projekt erstellen (dh ich bin in der Lage, die „über“ Registerkarte Umleitung auf den Login-Bildschirm zu machen, wenn ich nicht angemeldet bin) , so gehe ich davon aus ich die Dinge auf dem Weg muckte haben, wie ich meine app gebaut haben. Weiß jemand, wo ich sollte dieses Problem beheben suchen? Ich habe Benutzer und sie haben Rollen; Ich bin mit dem ASP.net-Schema, das automatisch erstellt wird; Ich habe meine Datei web.config oben geprüft und unten und obwohl ich ziemlich neu bin dazu nichts scheint der Ort zu sein, aus. Ich habe keine Ahnung, warum meine Genehmigung Filter nicht funktionieren.?.

War es hilfreich?

Lösung

Ich schrieb ein benutzerdefiniertes Attribut, dieses Problem zu lösen. Sie können Ihre Controller-Methoden Attribut wie folgt:

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

    return View();
}

Der Code für das Attribut wird wie folgt ....

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);
                }                
            }  
        }      
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top