пользовательский атрибут для перенаправления на основе свойства объекта пользователя (asp.net mvc) - PullRequest
2 голосов
/ 27 марта 2011

Я использовал собственный атрибут авторизации, чтобы запретить пользователям без подписки доступ к некоторым действиям

public class IsSubscriptionActive : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
       //check if user logged in , if not return false
       //get user object from request
       if(UserObject.IsSubscriptionActive)
           return true;
       else
           return false;
    }
}

Проблема здесь в том, что при этом перенаправляются пользователи на страницу входа независимо от того, вошел ли пользователь в систему или нет.

Итак, я хочу использовать атрибут авторизации по умолчанию, как есть, но иметь другой атрибут, который будет проверять состояние подписки и перенаправлять. Как я могу это сделать?

1 Ответ

2 голосов
/ 27 марта 2011

Не проверено, но попробуйте:

public class IsSubscribedAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (filterContext.HttpContext.User.Identity == null || 
              !filterContext.HttpContext.User.Identity.IsAuthenticated)
        {
             filterContext.Result = 
              new RedirectResult(System.Web.Security.FormsAuthentication.LoginUrl
                           + "?returnUrl=" + 
              filterContext.HttpContext.Server.UrlEncode
                           (filterContext.HttpContext.Request.RawUrl));
        }
        if (isSubscribed)//check subscription here.
        {
            filterContext.HttpContext.Response.StatusCode = 401;
            filterContext.Result = new HttpUnauthorizedResult();
        }//you can set the statuscode/result as you like?
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...