我创建了我赢得的授权属性。这在控制器中工作得很好。 如何在视图中使用它。
示例:我有一个管理用户链接,如果您无法访问此页面,我不想显示该链接。
这是我的授权属性。
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>
答案 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>
对我来说有点脏,但它可能会有所帮助。