Authorize 属性可以很好地基于 Action 进行一些访问控制,但假设我在布局中有一些 UI 元素,除非用户授权,否则应该注意输出。
我可以在 ViewBag 中设置一些布尔值,但我猜这不是一个好的解决方案。
Layout.cshtml 中的某处:
@if (ViewBag.IsAuthorized)
{
<li>@Html.ActionLink("Index", "Admin")</li>
}
让我知道是否有更好的解决方案。谢谢。
Authorize 属性可以很好地基于 Action 进行一些访问控制,但假设我在布局中有一些 UI 元素,除非用户授权,否则应该注意输出。
我可以在 ViewBag 中设置一些布尔值,但我猜这不是一个好的解决方案。
Layout.cshtml 中的某处:
@if (ViewBag.IsAuthorized)
{
<li>@Html.ActionLink("Index", "Admin")</li>
}
让我知道是否有更好的解决方案。谢谢。
使用WebPageRenderingBase.User
对象;假设您之前已将用户设置为 HttpContext 或 Controller(您确实应该如此)。由于您使用的是Authorize
属性,我认为必须有一个User
- 所以希望以下内容应该有效。
这User
可以很容易地在 Razor 中访问:
@User.Identity.Name
将输出当前用户的名称。因此if
,仅在用户通过身份验证时运行的块将是:
@if(User.Identity.IsAuthenticated)
{
Hello
}
"Hello"
如果用户通过身份验证,则输出。
感谢下面的 James 提醒我您可以检查IsAuthenticated
该User
对象 - 我最初找不到它 - 但后来记得它在Identity
!
您可以helper method
从布局中创建并调用它。
@Helper.IsAuthorize()
您可以调用一个函数来验证用户是否已通过身份验证:
帮手:
public bool checkUser(string user)
{
//User is allowed?
return true/false;
}
布局:
@if (checkUser(User.Identity.Name)
{
<li>@Html.ActionLink("Index", "Admin")</li>
}