如何在我的视图中使用我的自定义AuthorizeAttribute

时间:2010-11-26 19:10:42

标签: asp.net asp.net-mvc-2 c#-4.0 authorization

我创建了我赢得的授权属性。这在控制器中工作得很好。 如何在视图中使用它。

示例:我有一个管理用户链接,如果您无法访问此页面,我不想显示该链接。

这是我的授权属性。

public class UserAuthorizeAttribute : AuthorizeAttribute
    {
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (httpContext.Session["UserID"] == null)
            {
                return false;
            }

            IIssUserRepository repUser = new IssUserRepository(EntityFactory.GetEntity());
            IssUser usr = repUser.GetUserByID(Convert.ToInt32(httpContext.Session["UserID"]));

            return usr.CanManageUser;
        }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
            if (filterContext.Result is HttpUnauthorizedResult)
            {
                filterContext.Result = new RedirectToRouteResult(
                  new RouteValueDictionary {
                      { "clubShortName", filterContext.RouteData.Values[ "clubShortName" ] },
                      { "area",""},
                      { "controller", "Account" },
                      { "action", "Unauthorized" }
                    });
            }

        }
    }


以下是我在控制器中使用它的方法:

 [UserAuthorize]
 public class UserController : Controller

我需要在视图中使用它。但是如何

<li class="CssMenui">Product</li>
<%if (......... UserAuthorize .......) %>
    <li class="CssMenui">User Management</li>
<li class="CssMenui">Other</li>

1 个答案:

答案 0 :(得分:0)

愚蠢的解决方案是在覆盖OnAuthorization时向ViewData添加标记:

var view = filterContext.Result as ViewResult;
if (view != null)
   view.ViewData["IsAuthorized"] = !(filterContext.Result is HttpUnauthorizedResult);

然后可以重写您的观点:

  <li class="CssMenui">Product</li>
  <%if (((bool?)ViewData["IsAuthorized"]) == true) %>
      <li class="CssMenui">User Management</li>
  <li class="CssMenui">Other</li>

对我来说有点脏,但它可能会有所帮助。