С# MVC Должен ли я использовать БД для поставщика ролей

Я пытался использовать поставщика ролей, но уже неделю у меня болит голова.

Все, что я пытаюсь сделать, это позволить пользователю видеть страницу «Администратор», если он является администратором (я добавил столбец администратора в свою базу данных, чтобы он был равен 0 или 1)

Вот код в моем контроллере для входа

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


                        }

вот способ добавить пользователя в роль

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

            Roles.AddUserToRole(user, role);

}

для контроллера администратора я хочу ввести это

[Authorize(role= "admin")]

Вот мой веб-конфиг

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

мой вопрос: нужно ли мне использовать базу данных (то есть мне нужно было добавить таблицы ролей и т. д.), чтобы использовать этого поставщика ролей. Если да, есть ли другой способ реализовать это?


person kayze    schedule 15.10.2013    source источник
comment
Я уверен, что вам нужна база данных для этого. Но если вы настроили его правильно, таблицы должны быть настроены автоматически и могут быть заполнены через ваше приложение.   -  person DrCopyPaste    schedule 15.10.2013


Ответы (1)


Если вы используете SimpleMembership Provider, таблицы, которые вы получите автоматически, будут -> Ваша пользовательская таблица, Роли, UsersInRoles, Членство, где в Ролях вы можете добавить желаемые роли, а в UsersInRoles вы можете добавить пользователей в роль с помощью этой строки: если вы уже иметь роль "Администратор" в вашей таблице базы данных для ролей

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

заполнение роли в таблице ролей в базе данных происходит так, как вы это делаете:

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" });
} 

вам также придется изменить абзац членства в вашей веб-конфигурации следующим образом:

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

но это не нужно делать каждый раз, когда вы добавляете пользователя в роль. Надеюсь это поможет.

person dlght    schedule 27.11.2013