0

I've been trying to use role provider but its been giving me headaches for a week.

All I am trying to do is allow a user to be able to see "Admin" Page if they are an admin (I've added Admin Coloumn in my database, to be 0 or 1)

Here is the code in my Controller for Login

if (user.Admin == 1)
                        {
                            addUserToRole(user.UserID, "Admin");
                        }
                        else
                        {


                        }

here is the method to add user to a role

public void addUserToRole(String user, String role)
        {
            if (!Roles.RoleExists(role))
                Roles.CreateRole(role);

            Roles.AddUserToRole(user, role);

}

for the admin controller, I want to enter this

[Authorize(role= "admin")]

Here is my webconfig

<profile defaultProvider="DefaultProfileProvider">
      <providers>
        <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxx" connectionStringName="DefaultConnection" applicationName="/" />
      </providers>
    </profile>
    <membership defaultProvider="DefaultMembershipProvider">
      <providers>
        <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxx" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>
    <roleManager defaultProvider="DefaultRoleProvider" enabled="true">
      <providers>
        <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxx" connectionStringName="Database2Entities1" applicationName="/" />
      </providers>
    </roleManager>

my question is do I have to use database (meaning I had to add roles tables, etc) to use this role provider. If yes is there another way I could implement this?

tereško
  • 58,060
  • 25
  • 98
  • 150
kayze
  • 738
  • 8
  • 19
  • 33
  • I am pretty sure you need a database for this. But if you configured it correctly tables should be setup automatically and can be populated through your application. – DrCopyPaste Oct 15 '13 at 11:31

1 Answers1

0

If you use SimpleMembership Provider the tables you will get automaticlly will be --> Your user table, Roles, UsersInRoles, Membership where in Roles you can add roles you wish and in UsersInRoles you can add users to role with this line: assuming you already have the role "Admin" seed-ed into your database table for Roles

System.Web.Security.Roles.AddUsersToRole("username, "yourrolename");

the seeding of the role in the Roles table in the database is as you do it:

WebSecurity.InitializeDatabaseConnection("DefaultConnection",
  "UserProfile", "UserId", "UserName", autoCreateTables: true);

var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)Membership.Provider;

if (!roles.RoleExists("Admin"))
{
     roles.CreateRole("Admin");
}

// you can do the seed of the role to user in the seed method too
if (membership.GetUser("user", false) == null)
{
     membership.CreateUserAndAccount("user", "123456");
}
if (!roles.GetRolesForUser("user1").Contains("Admin"))
{
    roles.AddUsersToRoles(new[] { "user" }, new[] { "Admin" });
} 

you will also have to change the membership paragraph in your web config with this:

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

but is not needed to be done every time you add user to role. Hope this helps.

dlght
  • 1,406
  • 1
  • 18
  • 35