mvc 3 сеанс и авторизация атрибута - PullRequest
4 голосов
/ 21 марта 2012

Мой сайт открыт для всех, но у меня есть контроллер с некоторым методом, в который может войти только менеджер с пользователем и паролем. Я сохраняю bool IsManager в session.
Я хотел бы использовать атрибут authorize для блокировки кого либо IsManager == false.

Ответы [ 2 ]

8 голосов
/ 21 марта 2012

Сначала определите ActionFilter:

public class TheFilter: ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
        var session = filterContext.HttpContext.Session;
        if ((bool?)session["IsManager"] == true)
            return;

        //Redirect him to somewhere.
        var redirectTarget = new RouteValueDictionary
             {{"action", "{ActionName}"}, {"controller", "{ControllerName}"}};
        filterContext.Result = new RedirectToRouteResult(redirectTarget);
   }
}

Затем используйте его над ограниченным действием (или контроллером):

//[TheFilter]
public class ManagersController : Controller
{
    [TheFilter]
    public ActionResult Foo()
    {
        ...
        return View();
    }
}
1 голос
/ 21 марта 2012

Чтобы сохранить это в соответствии с безопасностью ASP.NET, вы должны добавить роль IsManager в свою систему членства / роли, а затем добавить этого пользователя в роль. Тогда взлома не требуется, и вы можете использовать встроенный атрибут Authorize.

Используете ли вы встроенные поставщики членства? Если так, то это было бы несложно.

...