C# 正在检查控制器和视图中的权限

C# 正在检查控制器和视图中的权限,c#,asp.net-mvc,asp.net-mvc-3,permissions,C#,Asp.net Mvc,Asp.net Mvc 3,Permissions,我想创建一些操作的权限,如创建或更新信息(但不用于显示)。 为此,我在所有必要的方法之前添加属性,例如 [Permissions(Permissions.Admin)] public ActionResult Create() { //... } 此外,我不想让链接在索引页上保持活动状态。因此,我必须在视图中添加一些检查 @if (checking...) { @Html.ActionLink("Create New", "Create") } 我加的支票越多,就越无聊,

我想创建一些操作的权限,如创建或更新信息(但不用于显示)。 为此,我在所有必要的方法之前添加属性,例如

[Permissions(Permissions.Admin)]
public ActionResult Create()
{
   //...
}
此外,我不想让链接在索引页上保持活动状态。因此,我必须在视图中添加一些检查

@if (checking...)
{
    @Html.ActionLink("Create New", "Create")  

}
我加的支票越多,就越无聊,我要记住的事情就越多。
如何正确操作?

您可以创建视图的只读版本,并让控制器决定返回哪个版本(基于您的权限)

共享UI可以在局部视图中外部化


建议尽可能使视图不受业务逻辑的影响。

您还可以创建两个不同的视图模型。一个用于读/写,一个用于刚读。然后使用该功能,您可以让一个视图自动选择要显示的正确模板,使用此行:

@Html.DisplayForModel()

您可以为此创建一个HtmlHelper

类似于
@Html.ActionLinkUsingPermissions(“新建”、“创建”、Permissions.Admin)


HtmlHelper将根据当前用户权限决定是否显示链接。

我理解这一点。我希望权限由角色决定。我假设角色不同,可能由不同的权限组合组成。我想优化我的代码,并努力保持其结构化。除了增加视图数量之外,没有其他方法可以做到吗?如果我需要两个以上的视图模型怎么办?例如,如果角色由不同的权限组合组成。创建此类操作所需的尽可能多的ViewModel是否很好?如果是这样,我会选择另一条路线。这将留给许多模型,可能不值得。是的,这比在视图中检查要好。