【发布时间】:2013-11-30 17:12:47
【问题描述】:
My View 使用@Html.Action(…) 来反映各种功能块。在打开页面时,站点会为没有在控制器方法中指定角色的用户显示授权对话框。 (例如“经理”或“呼叫者”)按“取消”获得:
401 - 未经授权:由于凭据无效,访问被拒绝。
如果用户没有所需的角色、@Html.Action 被忽略或不显示任何内容,我是否可以更改我的应用程序行为?
我的看法:
@model InApp.ViewModel.ListViewModel
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div id="CallList">
@Html.Action("List","Call",new {id=Model.id})
</div>
<div class="Order">
@Html.Action("Create","Order",new {id=Model.id})
</div>
控制器:
[Authorize(Roles = "manager, caller")] //if a user is not 'manager' or 'caller'
public PartialViewResult List() // nothing is shown
{
//...private
return PartialView();
}
[Authorize(Roles = "manager, admin")]
public PartialViewResultCreate()
{
//...private
return PartialView();
}
试图找到正确的解决方案我发现了类似的问题:
Ignore @Html.Action() if user not in Role 和asp.net MVC3 razor: display actionlink based on user role 但我不喜欢视图中的“如果”条件。我正在寻找一种复杂的解决方案来仅使用 AuthorizeAttribute 来隐藏和显示单独的部分,并避免在 View 或 Controller 中使用 if – else。感谢您的帮助!
【问题讨论】:
-
如果您想完全避免 if 语句,也许您可以将这些链接(您的视图上的@html.actions)移动到它们各自的局部视图。
标签: c# asp.net asp.net-mvc asp.net-mvc-3 razor