【问题标题】:ASP.NET MVC check if user belongs to [x] groupASP.NET MVC 检查用户是否属于 [x] 组
【发布时间】:2010-01-14 15:43:38
【问题描述】:

也许我用错了方法,应该在动作过滤器中做所有事情,在这种情况下,请指出正确的方向!

我正在设置我的 ASP.NET MVC 应用程序,以便一个 HomeController Index 操作提供两种不同类型的内容,如下所示:

if(Request.IsAuthenticated)
  return View("IndexRegistered");
else
  return View("IndexGuest");

这很好,但我想把它分成三个,以便管理员成员拥有自己的页面...

if(Request.IsAuthenticated)
{
  if( /* user is a member of administrators */)
    return View("IndexAdministrator");
  else
    return View("IndexCustomer");
}
else
  return View("IndexGuest");

有人能告诉我这个谜题缺少的部分吗?

【问题讨论】:

    标签: asp.net-mvc authentication authorization usergroups


    【解决方案1】:

    使用Authorize Action FilterRoles属性:

    [Authorize(Roles="Administrators,Moderators")]
    public ActionResult SomeAction(){
    
    }
    

    或者使用User.IsInRole()方法:

    if(User.IsInRole("Administrator")) { ... }
    

    【讨论】:

    • if(User.IsInRole("Administrator")) 正是我所需要的,谢谢!如果有更好的方法可以做到这一点,仍然可以输入。在使用 Authorize 的第一个实例中,它似乎对我来说是一个更好的方法(尽管我真的不知道为什么),除非我理解它,它只提供一个全面的允许/拒绝条件,而不是多个条件我在追求什么。
    • Role属性可以添加多个角色,我会更新代码。
    • 在角色属性中指定一个或一百个角色并不重要,该示例仍然只为您提供一揽子允许或拒绝规则,而不是根据每个指定的角色进行切换。第二个示例完成了这项工作。
    • 我有The name 'User' does not exist in the current context,所以我不得不将我的代码更改为:HttpContext.Current.User.IsInRole("role");
    • @FilipEkberg 的链接没有死,只是多了一个斜线,固定版本:wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions
    【解决方案2】:

    如果您查看默认 MVC 项目模板中开箱即用的身份验证提供程序,很容易在其中添加您自己的角色支持并在会话中对其进行跟踪,因此您上面的代码将变为:

    if(Request.IsAuthenticated)
    {
      if(Session["Role"] == "Administrator")
        return View("IndexAdministrator");
      else
        return View("IndexCustomer");
    }
    else
      return View("IndexGuest");
    

    然后打开如下可能性:

    if(Request.IsAuthenticated)
      return View("Index" + Session["Role"]);
    else
      return View("IndexGuest");
    

    【讨论】:

      猜你喜欢
      • 2012-08-15
      • 1970-01-01
      • 2012-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      • 2011-01-12
      相关资源
      最近更新 更多