【问题标题】:Best Way To Access User Permissions From View从视图访问用户权限的最佳方式
【发布时间】:2014-02-21 20:30:04
【问题描述】:

在我的 ASP.NET MVC 站点中,我的设置允许用户拥有角色,而角色拥有权限。通常,这些权限是为控制器设置的。在我网站的主导航菜单中,经过身份验证的用户可以查看所有项目,即使他们无权访问该页面。

目前我只能根据用户身份验证来配置菜单:

@if (Request.IsAuthenticated){ }

我想知道,将用户权限传递给视图的最佳方式是什么,只是为了为该用户配置菜单?有一些常见的方法吗,还是我必须自己实现?我没有找到太多关于它的信息,但也许我使用了错误的搜索词。

感谢您的建议。

编辑

抱歉,我可能不够清楚。这是我在 _Layout 页面中的主导航菜单。此外,分配给角色的权限非常可由管理员配置(他们还可以创建和删除角色),因此检查用户是否处于角色中不会满足我的需求。

【问题讨论】:

    标签: c# asp.net-mvc menu permissions roles


    【解决方案1】:

    最好的方法是在视图使用的视图模型上拥有一个属性。

    【讨论】:

    • 我的导航菜单在我的布局中 - 所有视图都使用它
    • 那么我会说 Request.IsAuthenticated 很好
    【解决方案2】:

    可以使用Roles类静态方法IsUserInRole:

    @if (Roles.IsUserInRole("Admin"))
    {
       // ...
    }
    

    【讨论】:

      【解决方案3】:

      你可以创建一个动作,比如CommonController,它返回一个包含你的导航的局部视图。这个局部视图可以有自己的模型,可以从控制器中填充。例如,这允许您使用依赖注入。

      动作可能如下所示:

      [ChildActionOnly]
      public ActionResult Navigation()
      {
          var model = new NavigationModel();
          // populate the model..
      
          return PartialView("_Navigation", model);
      }
      

      你可以像这样在你的视图中渲染这个部分(_Layout.cshtml 在你的情况下):

      @Html.Action("Navigation", "Common")
      

      在大多数情况下,Request.IsAuthenticated 就可以了。仅当您需要更高级的东西时才使用它。

      【讨论】:

      • 好主意!刚刚实现它,它工作得很好。非常感谢。
      猜你喜欢
      • 2010-11-05
      • 2011-04-10
      • 2023-03-16
      • 2013-09-25
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多