2013-10-15 2 views
0

Я пытался использовать роль поставщика, но он давал мне головные боли в течение недели.C# MVC Должен ли я использовать БД для поставщика ролей

Все, что я пытаюсь сделать, это позволить, чтобы пользователь мог видеть «Admin» страницу, если они админ (я добавил Администратор Coloumn в моей базе данных, чтобы быть 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")] 

Вот мой 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> 

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

+0

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

ответ

0

Если вы используете SimpleMembership Provider, таблицы, которые вы получите automaticlly, будут -> Ваша пользовательская таблица, роли, пользователиInRoles, членство, в которых в роли можно добавить роли, которые вы хотите, и в UserInRoles вы можете добавить пользователей к роли в этой строке : если вы уже имеете роль «Администратор» семенной ред в таблицу базы данных для ролей

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

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

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

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