如何在视图布局中处理授权

时间:2012-07-03 08:59:10

标签: c# asp.net-mvc-3 view acl

授权属性很适合在Action上做一些访问控制,但是假设我在布局中有一些UI元素应注意输出,除非用户是授权。

我可以在ViewBag中设置一些布尔值,但这不是我猜的好方法。

Layout.cshtml中的某个地方:

@if (ViewBag.IsAuthorized)
{
     <li>@Html.ActionLink("Index", "Admin")</li>
}

如果有更好的解决方案,请告诉我。 感谢。

3 个答案:

答案 0 :(得分:3)

使用WebPageRenderingBase.User对象;假设您之前已将用户设置为HttpContext或Controller(您确实应该这样)。由于您使用的是Authorize属性,我认为必须有User - 所以希望以下内容可以正常运行。

可以很容易地在Razor中访问此User

@User.Identity.Name

将输出当前用户的名字。因此,仅在用户通过身份验证时才运行的if块将是:

@if(User.Identity.IsAuthenticated)
{
   Hello
}

如果用户已通过身份验证,则输出"Hello"

感谢下面的James提醒我你可以查看IsAuthenticated User对象的Identity - 我最初找不到它 - 但后来记得它在{{1}}!

答案 1 :(得分:0)

您可以制作helper method并从布局中调用它。

@Helper.IsAuthorize()

答案 2 :(得分:0)

您可以调用一个函数来验证用户是否经过身份验证:

<强>助手:

public bool checkUser(string user)
{
//User is allowed?
return true/false;
}

<强>布局:

@if (checkUser(User.Identity.Name)
{
     <li>@Html.ActionLink("Index", "Admin")</li>
}