ASP.NET MVC:授权用户的不同功能 - 单一视图

时间:2013-06-18 13:33:47

标签: asp.net-mvc asp.net-mvc-3

假设我有一个MVC视图,其中包含一组可供非授权用户使用的功能,以及一组可供授权用户使用的扩展功能。目前,我已通过使用

标记我的视图来实现此目的
@if(User.IsInRole(...)) {...}

在视图文件中的几个位置。这不是什么大不了的事情,只有2或3件经过身份验证的用户可以做的事情超出非认证功能,但现在我在“仪表板”类型的页面中都有这个。它似乎变得有点混乱。

是否有更清洁或更优雅的方式来实现这一点?我正在使用viewmodels。我想知道是否应该使用基于角色的不同viewmodel / views,但是使用不同的viewmodel似乎可能更难维护。我不确定最佳做法是什么,我对这些想法持开放态度。

修改

我正在做的一个例子:我有几个列表/表允许管理员编辑记录,因此代码增加了额外的

<td>

用于经理允许的操作。另一个用例:当经理登录时,员工姓名现在是一个动作链接,而不仅仅是文本。

2 个答案:

答案 0 :(得分:3)

您可以尝试将基于角色互换的视图的每个部分封装到部分视图中。这对我来说效果很好,在尝试对代码进行故障排除时更加清晰,而不是在单个视图中看到一堆@if语句。

答案 1 :(得分:0)

嗯。我有这个想法。您需要具有RolesAllowedToAccess(string [])等属性的仪表板枚举列表

在视图中,您可以通过仪表板枚举进行操作,其中RolesAllowedToAccess包含当前用户角色。

为每个仪表板渲染部分后。搞定?