获得授权属性的许可?

时间:2009-12-21 08:18:40

标签: c# .net asp.net-mvc asp.net-membership roleprovider

我已经实现了自己的Authorize属性,我发现当我使用[Authorize]时,它会查询检查权限。

有没有办法可以获得该权限并在当前使用Authorize属性的控制器中使用它而无需重写和重新查询控制器中的代码?

1 个答案:

答案 0 :(得分:3)

是的,你可以。如果您将Authorize属性实现为ActionFilterAttribute,则可以使用ViewData集合来存储如下信息:

    public class RequireRegistrationActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;
        HttpResponseBase response = filterContext.HttpContext.Response;

        if (request != null && 
            response != null)
        {
            bool isAuthenticated = request.IsAuthenticated;
            filterContext.Controller.ViewData["IsAuthenticated"] = isAuthenticated;

            if (!isAuthenticated)
            {
                string url = String.Format(
                   "/?ReturnUrl={0}", 
                   HttpUtility.UrlEncode(request.Url.ToString()));
                response.Redirect(url);
            }
        }
    }
}

在anoteated controller的acrion中,您可以访问以下字段:

bool isAuthenticated = (bool)(ViewData["IsAuthenticated"] ?? false);
相关问题