从视图访问用户权限的最佳方式

时间:2014-01-29 19:53:01

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

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

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

@if (Request.IsAuthenticated){ }

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

感谢您的任何建议。

修改

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

3 个答案:

答案 0 :(得分: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就好了。只有在需要更高级的东西时才使用它。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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