0

我想在索引控制器中运行以下代码

public ActionResult Index()
{
    if(User!=null)
    {
        if(0==(Roles.GetRolesForUser(username).ToList().Contains("administrator")))
        {
            //do something
        }
    }
    return View();
}

GetRolesForUser我在加载索引页面时遇到异常,尤其是在User不为空时(用户在线/登录)

异常要求我调用WebSecurity's InitializeRoles_appStart.cshtml 文件

4

2 回答 2

1

Controller.User属性永远不会为空。当用户未登录时,User仍会引用一个IPrincipal实例。但是,User.Identity.Name将等于一个空字符串。此外,User.IsAuthenticated将等于false.

尝试这个:

public ActionResult Index()
{
    if (User.IsInRole("administrator"))
    {
        // do something
    }
    return View();
}
于 2013-02-22T12:12:34.483 回答
0

如果您还没有,您必须在 web.config 中启用角色管理器。

看到这篇文章:https ://stackoverflow.com/a/12980969/1502563

以下链接答案的片段:

<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
  <providers>
    <clear/>
    <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
  </providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider">
  <providers>
    <clear/>
    <add name="SimpleMembershipProvider" 
         type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData"/>
  </providers>
</membership> 

哦,当然 - 您还需要创建角色管理员。

有关从头开始的一些方法,请参阅这些链接:

http://odetocode.com/blogs/scott/archive/2012/09/05/seeding-membership-amp-roles-in-asp-net-mvc-4.aspx

http://blog.longle.net/2012/09/25/seeding-users-and-roles-with-mvc4-simplemembershipprovider-simpleroleprovider-ef5-codefirst-and-custom-user-properties/

于 2013-02-22T12:52:55.720 回答