【问题标题】:Checking permissions in controller and in view检查控制器和视图中的权限
【发布时间】:2012-01-17 23:32:09
【问题描述】:

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

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

此外,我不想让链接在索引页面上保持活动状态。所以我必须在视图中添加一些检查。

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

}

我添加的检查越多,就越无聊,我必须记住的事情就越多。 怎么做才对?

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 permissions


    【解决方案1】:

    您可以为此创建一个 HtmlHelper。

    类似@Html.ActionLinkUsingPermissions("Create New", "Create",Permissions.Admin)

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

    【讨论】:

    • 是的,这比在视图内部进行检查要好。
    【解决方案2】:

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

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

    建议您的视图尽可能远离业务逻辑。

    【讨论】:

    • 我明白这一点。我希望权限由角色确定。我假设角色是不同的,并且可能包含不同的权限组合。我想优化我的代码并尝试保持其结构化。除了增加观看次数之外,没有其他办法吗?
    【解决方案3】:

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

    @Html.DisplayForModel()
    

    【讨论】:

    • 如果我需要两个以上的视图模型怎么办?例如,如果角色将由不同的权限组合组成。为此类操作创建尽可能多的视图模型是否很好?
    • 在那种情况下,我会走不同的路线。这将留给许多模型,可能不值得。
    猜你喜欢
    • 2019-05-07
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-02
    • 2020-11-04
    相关资源
    最近更新 更多