0

I would like to run the following code in Index controller

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

I got an exception at GetRolesForUser when the Index page loads especially when the User is not null (the user is online/logged in)

The exception asks me to call WebSecurity's InitializeRoles in _appStart.cshtml file

Asp Asp
  • 864
  • 1
  • 7
  • 15

2 Answers2

1

The Controller.User property will never be null. When a user is not logged in, User will still reference an IPrincipal instance. However, User.Identity.Name will be equal to an empty string. Also, User.IsAuthenticated will equal false.

Try this:

public ActionResult Index()
{
    if (User.IsInRole("administrator"))
    {
        // do something
    }
    return View();
}
danludwig
  • 46,965
  • 25
  • 159
  • 237
0

If you haven't already, you have to enable rolemanager in web.config.

See this post: https://stackoverflow.com/a/12980969/1502563

Snippet from linked answer below:

<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> 

Oh and of course - you need to create the role administrator too.

See these links on some ways to do it from scratch:

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/

Community
  • 1
  • 1
OakNinja
  • 2,326
  • 18
  • 20