Подтвердить что ты не робот

Как проверить, разрешен ли пользователь внутри Action

Обычно я защищаю свои действия с помощью [Authorize], но на этот раз мне нужно проверить, разрешен ли пользователь внутри действия.

Например,

if(userIsAuthorized) {
    //do stuff
}
else {
    //return to login page
}

Я верю Я использую "Аутентификация форм"

Этот вопрос похож на этот, но ни один из приведенных ответов не работал.

EDIT: я сделал еще больше копания - кажется, что если я оставил точку на Action, у которого есть [Authorize], установлен User.Identity, но в действиях без него User.Identity пуст, даже если я вошедший в систему

4b9b3361

Ответ 1

Если вы просто хотите узнать, вошел ли пользователь в систему:

if (User.Identity.IsAuthenticated) { ... }

Если вы пытаетесь сделать что-то специфическое для ролей:

if (User.IsInRole("Administrators")) { ... }

Экземпляр User является общедоступным свойством класса Controller, поэтому у вас всегда есть доступ к нему из контроллера, который вы пишете. Если ни один пользователь не зарегистрировался, вы должны иметь GenericPrincipal для User и GenericIdentity для User.Identity, поэтому не беспокойтесь о проверке нулей.

Ответ 2

Request.IsAuthenticated должен работать для того, что вы пытаетесь сделать.

Ответ 3

Я предлагаю сначала выяснить, какое разрешение вы используете.;)

Ответ, который вы опубликовали, верен. Из того, что я помню, выкалывая атрибут [Авторизовать] и связанный с ним код ActionFilter, MVC внутренне вызывает Page.User.Identity.IsAuthenticated так же, как эти примеры кода.

Ответ 4

Создайте такой атрибут: OnActionExecuting будет выполняться сначала перед другим кодом из действия

     public class IsAuthenticatedAttribute : ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
               //do your validations here. and redirect to somewhere if needed. 
                filterContext.HttpContext.Response.Redirect("/") //this will send user to home.
            }
        }

для каждого действия, где вам нужно проверить, добавьте атрибут следующим образом:

[IsAuthenticatedAttribute]
public ActionResult ActionName(parameters?)
{
     // no need to worry about checking here.
    //do you action things
}

EDIT: Это еще завершает действие, а затем перенаправляет его. Не так много полезного.