2015-11-04 2 views
3

Я знаю, что есть атрибут, когда пользователь должен авторизоваться или нет. Вы также можете разместить [AllowAnonymous] над ним. Смотрите также код ниже:Атрибут разрешает анонимность только в ASP.Net MVC

[Authorize] // only when the user is authorize 
public class AccountController : Controller 
{ 
    [HttpGet] 
    [AllowAnonymous] // also when the user in not authorize. 
    public ActionResult Login(string returnUrl = "") 
    { /* Some code */ } 

    [HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) 
    { /* Some code */ } 
} 

Но есть также атрибут для разрешить только анонимным. Например: страница входа в систему отображается только тогда, когда пользователь не разрешает?

+0

Существует не один. И есть причина, по которой нет никого. –

+0

@MarkHomer: и не могли бы вы рассказать мне, почему его нет? –

+0

Зачем вам когда-либо приходилось запрещать авторизованным пользователям? он просто кричит плохой дизайн –

ответ

6

Я не думаю, что есть существующий, но нет причин, по которым вы не можете бросить свои собственные. Тем не менее, я хотел бы отметить, что это кажется странным, что вы бы пойти на дополнительные усилия, чтобы ограничить содержание в аутентифицированном пользователь:

public class AnonymousOnly : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      // Do what you want to do here, e.g. show a 404 or redirect 
     } 
    } 
} 

Тогда просто украсить свой класс/метод с новым атрибутом:

[AnonymousOnly] 
public ActionResult Login(string returnUrl = "") 
{ 
    // code 
} 
+1

Да, странно ограничивать контент аутентифицированным пользователем, но я не допущу, чтобы ваша аутентификация могла перейти на страницу входа и регистрации. Когда он будет аутентифицирован, вы не сможете перейти на страницу входа в систему, чтобы снова подтвердить подлинность ... –

+2

@ Если у вас есть два случая, я просто проверю, были ли они уже зарегистрированы внутри метода и «RedirectToAction», а не создайте новый класс для одного метода. Это, как говорится, все зависит от предпочтений, поэтому подходите к нему, но вы и ваша команда предпочтете. – ediblecode

Смежные вопросы