Domanda

Sto cercando di aggiungere l'autorizzazione ai miei regolatori e non sta funzionando ...

Non sono sicuro dove guardare nel mio programma, ma aggiungendo il

[Authorize] 

filtro nel mio controller non funziona, per non parlare di una cosa del genere

[Authorize(Roles = "Manager")]

Sono stato in grado di ottenere questo lavoro con l'applicazione predefinita che viene fornito quando si crea un nuovo progetto MVC (ad esempio, sono in grado di fare il "di" scheda reindirizzare la schermata di login, se non sto collegato) , quindi suppongo che ho muck le cose lungo la strada, come ho costruito la mia app. Qualcuno sa dove dovrei essere alla ricerca per risolvere questo problema? Ho utenti e hanno ruoli; Sto utilizzando lo schema ASP.net che è auto-creato; Ho esaminato il mio file web.config su e giù e anche se sono abbastanza nuovo a questo, nulla sembra essere fuori luogo. Non ho idea perché i miei filtri di autorizzazione non funzionano.?.

È stato utile?

Soluzione

ho scritto un attributo personalizzato per risolvere questo problema. È possibile attribuire i vostri metodi del controller come segue:

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

    return View();
}

Il codice per l'attributo è il seguente ....

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);
                }                
            }  
        }      
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top