【问题标题】:Permissions within views in ASP MVCASP MVC 中视图内的权限
【发布时间】:2010-09-27 02:51:56
【问题描述】:

我了解您可以使用表单身份验证来根据您选择的标准授予/拒绝对某些页面的访问权限。

但是我希望比这更具体一点,比如根据用户的权限为用户显示不同的按钮。

我知道我可以做类似的事情

if(((User)ViewData["CurrentUser"]).IsEmployee).....

但这似乎不是很优雅,而且很快就会变得混乱。

这里有什么指南/工具/框架功能可以帮助我吗?

【问题讨论】:

    标签: asp.net-mvc user-interface permissions


    【解决方案1】:

    不要这样做。将控制器用于这种逻辑

    【讨论】:

    • 我有很多领域的看法。某些字段应仅在特殊情况下显示。我有很多案例。那么,我应该创建与案例一样多的视图吗???哇...
    【解决方案2】:

    使用基于角色的身份验证,然后适当地设置角色。然后您可以执行以下操作:

    if (ViewContext.HttpContext.User.IsInRole("vEmployee") {
    

    这样做的好处是它是 ASP.NET 的核心功能——甚至不是特定于 MVC 的——所以它可以与所有可能的成员资格提供程序一起使用。

    然后,您可以为要有条件地显示的任何控件添加视图助手重载:

    public static string TextBox(this HtmlHelper helper, 
        string name, string value, string role, object htmlAttributes)
    {
       if helper.ViewContext.HttpContext.User.IsInRole(role) {
           return helper.TextBox(name, value, htmlAttributes);
       } 
       else
       {
           return null;
       }
    }
    

    ...并称之为:

    <%= Html.TextBox("name", "value", "vEmployee", null) %>
    

    【讨论】:

      【解决方案3】:

      不久前,我在 WPF 应用程序中遇到了同样的问题。它也适用于 ASP.NET。

      对于每个“按钮”(WPF 中的用户控件),您通过属性设置执行其功能所需的角色。

      在您的操作开始时,您创建一个需要特殊授权的所有“按钮”列表。

      在调用“return View()”之前,您调用一个函数来迭代所有特殊的“按钮”并设置基于用户角色的可见性。

      对于有效的 WPF,因为您无法通过 get/post 请求调用该方法...对于网络,您应该做一些更复杂的事情,而不仅仅是隐藏/显示按钮...

      我希望这至少能给你一个线索...它在我的实现中工作得很好,但它只是一个原型...但我想我将来会使用它。

      PS:示例代码可以在here找到

      【讨论】:

      • 嗯,也许,但它不仅仅是按钮、某些形式和东西。无论如何,谢谢,我稍后会试试你的按钮,并可能相应地授予代表;)
      • 是的,但这就是重点。我说按钮是因为在我的例子中我使用了一个按钮。您可以将属性添加到完整的“用户控件”并根据角色进行渲染或不渲染...也许这不适合网络...但是您尝试这样做很好;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多