代码之家  ›  专栏  ›  技术社区  ›  Jean-Francois

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

  •  0
  • Jean-Francois  · 技术社区  · 15 年前

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

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

    这是我的授权属性。

    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 回复  |  直到 15 年前
        1
  •  0
  •   The Smallest    15 年前

    愚蠢的解决方案是在重写 OnAuthorization :

    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>
    

    对我来说有点脏,但这会有帮助的。