如何在mvc中保持视图不受授权逻辑的影响?

Dav*_*Lay 5 validation asp.net-mvc authorization

我有一个显示项目列表的视图.用户可以编辑,删除或创建新项目,但根据他们的授权,他们可能会或可能不会被允许执行某些操作.

我要求只显示当前用户可以执行的操作,但我不希望使用授权来混淆视图if-else's

鄙视是一个非常普遍的要求,我找不到一个真正令人满意的方法.

到目前为止,我最好的方法是为Html.ActionLink需要权限的扩展方法提供重载,但是会有更复杂的场景,比如隐藏整个html块或切换标签的文本框+隐藏.

有一个更好的方法吗?

Tej*_*ejs 2

我能想到的一个例子是调用 Html.RenderAction (链接: http: //msdn.microsoft.com/en-us/library/ee703490.aspx),然后传递您希望用作路由值的链接到操作方法(它将显示为操作的参数)。因为它是 RenderAction,所以您可以返回控制器进程,因此您可以让它根据用户的状态呈现您想要的任何视图或数据。

例子:

<% Html.RenderAction("Permissions" /* Controller */, "PermissionLink", new { Url = "Admin.aspx" }); %>
Run Code Online (Sandbox Code Playgroud)

你的控制器会有类似的东西:

public ActionResult PermissionsLink (string url)
{
     // Do Whatever kind of Authentication you want here, Session is available, etc

     if(authenticated)
        return View("Link");
     else
        return View("Blank");
}
Run Code Online (Sandbox Code Playgroud)