假设我有一个MVC视图,其中包含一组可供非授权用户使用的功能,以及一组可供授权用户使用的扩展功能。目前,我已通过使用
标记我的视图来实现此目的@if(User.IsInRole(...)) {...}
在视图文件中的几个位置。这不是什么大不了的事情,只有2或3件经过身份验证的用户可以做的事情超出非认证功能,但现在我在“仪表板”类型的页面中都有这个。它似乎变得有点混乱。
是否有更清洁或更优雅的方式来实现这一点?我正在使用viewmodels。我想知道是否应该使用基于角色的不同viewmodel / views,但是使用不同的viewmodel似乎可能更难维护。我不确定最佳做法是什么,我对这些想法持开放态度。
修改
我正在做的一个例子:我有几个列表/表允许管理员编辑记录,因此代码增加了额外的
<td>
用于经理允许的操作。另一个用例:当经理登录时,员工姓名现在是一个动作链接,而不仅仅是文本。
答案 0 :(得分:3)
您可以尝试将基于角色互换的视图的每个部分封装到部分视图中。这对我来说效果很好,在尝试对代码进行故障排除时更加清晰,而不是在单个视图中看到一堆@if语句。
答案 1 :(得分:0)
嗯。我有这个想法。您需要具有RolesAllowedToAccess(string [])等属性的仪表板枚举列表
在视图中,您可以通过仪表板枚举进行操作,其中RolesAllowedToAccess包含当前用户角色。
为每个仪表板渲染部分后。搞定?