0

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

@if(User.IsInRole(...)) {...}

在视图文件的几个地方。当经过身份验证的用户在未经身份验证的功能之外只能做两三件事时,这没什么大不了的,但是现在我在“仪表板”类型的页面中到处都是。好像有点乱了

有没有更干净或更优雅的方式来实现这一点?我正在使用视图模型。我想知道是否应该根据角色使用不同的视图模型/视图,但是使用不同的视图模型似乎更难以维护。我不确定最佳实践是什么,我对想法持开放态度。

编辑

我正在做的一个例子:我有几个允许经理编辑记录的列表/表格,所以代码添加了一个额外的

<td>

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

4

2 回答 2

3

您可以尝试将根据角色交换的视图的每个部分封装到部分视图中。这在过去对我来说效果很好,并且在尝试对代码进行故障排除时要干净得多,而不是在单个视图中看到一堆 @if 语句。

于 2013-06-18T13:40:01.460 回答
0

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

在视图中,您可以通过仪表板枚举来查找 RolesAllowedToAccess 包含当前用户角色的位置。

在您可以为每个仪表板呈现局部之后。有道理?

于 2013-06-18T13:46:58.780 回答