Assigning Roles with MVC SimpleMembership

JustAnotherDeveloper picture JustAnotherDeveloper · Jul 27, 2012 · Viewed 17.8k times · Source

I am trying out "SimpleMembership" in MVC3 via Nuget and have downloaded the sample to play with. The issue is that I cannot figure out how I would assign a role to a particular user.

In the standard MVC membership you can just use something like:

Roles.AddUserToRole(model.UserName, "StandardUser");

However, SimpleMembership only seems to have one method for roles exposed (unless Im being stupid!) which is

public void RequireRoles(params string[] roles)
        {
            WebSecurity.RequireRoles(roles);
        }

There must be an easy way as the following table was created as part of this nuget package:

-TABLE: webpages_Roles
     RoleId , RoleName

This is slightly confusing though as in App_Start/SimpleMembershipMvc3.cs there is the following:

Roles.Enabled = true;
RoleProvider provider3 = Roles.Providers["AspNetSqlRoleProvider"];
        if (provider3 != null)
        {
            RoleProvider provider6 = provider3;
            SimpleRoleProvider provider4 = CreateDefaultSimpleRoleProvider("AspNetSqlRoleProvider", provider6);
            Roles.Providers.Remove("AspNetSqlRoleProvider");
            Roles.Providers.Add(provider4);
        }

SimpleRoleProvider function

 private static SimpleRoleProvider CreateDefaultSimpleRoleProvider(string name, RoleProvider currentDefault)
            {
                RoleProvider previousProvider = currentDefault;
                SimpleRoleProvider provider = new SimpleRoleProvider(previousProvider);
                NameValueCollection config = new NameValueCollection();
                provider.Initialize(name, config);
                return provider;
            }

Does this package use the built in Role provider? If so, how does it hook up with the tables created by SimpleMembership

Answer

Ben Ripley picture Ben Ripley · Jun 20, 2013

You need to use the Roles API to interact with the Roles. Something like the following should work:

if (!Roles.RoleExists("Administrator"))
    Roles.CreateRole("Administrator");

if (!Roles.GetRolesForUser(model.UserName).Contains("Administrator"))
    Roles.AddUsersToRole(new[] { model.UserName }, "Administrator");