2011-12-11 27 views
2

我想为创建或更新信息(但不显示)等操作创建权限。 为此,我在所有必要的方法之前添加属性,例如检查控制器和视图中的权限

[Permissions(Permissions.Admin)] 
public ActionResult Create() 
{ 
    //... 
} 

而且我也不想离开的索引页面的链接。所以我必须在视图内添加一些检查。

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

} 

的多个检查添加,比较枯燥,而更多的事情我必须保持我的脑海里。 如何做到这一点?

回答

3

你可以为此创建的HtmlHelper,

喜欢的东西@Html.ActionLinkUsingPermissions("Create New", "Create",Permissions.Admin)

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

+0

是的,这比在视图内检查要好。 – Shymep

2

您可以创建视图的只读版本并让控制器决定应该返回哪个版本(根据您的许可)。

然后可以在部分视图中对共享UI进行外部化。

建议尽可能使业务逻辑尽可能不含业务逻辑。

+0

我明白这一点。我希望权限由角色决定。我假设角色是不同的,并且可能由不同的权限组合组成。我想优化我的代码并尽量保持结构。除了增加视图的数量之外,没有办法去做吗? – Shymep

1

您还可以创建两个不同的视图模型。一个用于读/写,另一个用于只读。然后,使用View Templates功能,你可以有一个视图会自动选择合适的模板,使用该行表示:

@Html.DisplayForModel() 
+0

如果我需要两个以上的视图模型会怎么样?例如,如果角色将由不同的权限组合组成。创建尽可能多的视图模型就像我需要这种操作一样好吗? – Shymep

+0

在这种情况下,我会走另一条路线。这将留给许多模型,可能不值得。 –