asp.net проблема с авторизацией mvc
-
23-09-2019 - |
Вопрос
Я пытаюсь добавить авторизацию к своим контроллерам, и это не работает...
Я не уверен, где искать в моей программе, но добавление
[Authorize]
фильтр в моем контроллере не работает, не говоря уже о чем-то подобном
[Authorize(Roles = "Manager")]
Мне удалось заставить это работать в приложении по умолчанию, которое предоставляется при создании нового проекта MVC (т. Е. я могу перенаправить вкладку "о программе" на экран входа в систему, если я не вошел в систему), поэтому я предполагаю, что я что-то напутал по ходу создания своего приложения.Кто-нибудь знает, где я должен искать, чтобы исправить это?У меня есть пользователи, и у них есть роли;Я использую ASP.net схему, которая создается автоматически;Я изучил свой файл web.config вдоль и поперек, и хотя я довольно новичок в этом, кажется, что здесь нет ничего неуместного.Я понятия не имею, почему мои фильтры авторизации не работают.?.
Решение
Я написал пользовательский атрибут, чтобы решить эту проблему.Вы можете приписать своим методам контроллера следующее:
[RequiresRole(Role="Admin")]
public ActionResult Index()
{
int i = 5 + 5;
return View();
}
Код для атрибута выглядит следующим образом....
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);
}
}
}
}
}