2014-10-16 4 views
8

Ich mag:Wie 5 Rollen in der Benutzeridentität in MVC verwenden

1) erstellen mvc Projekt.

2) meine eigene Datenbank erstellen und die Connectionstring in web.config Form ändern: zu:

3) ich das Projekt ausführen und einen neuen Benutzer verknüpften Tabelle hinzufügen, um meinen Datenbank.

4) Ich wollte eine Rolle einem Benutzer nach der Anmeldung eines Benutzers wie dieser Code in accountControler hinzuzufügen:

public async Task<ActionResult> Register(RegisterViewModel model) 
    { 
    if (ModelState.IsValid) 
     { 
      var user = new ApplicationUser() { UserName = model.Email, Email = model.Email }; 

      IdentityResult result = await UserManager.CreateAsync(user, model.Password); 
      if (result.Succeeded) 
      { 
       //******************* Add Role To User ************** 
       if (!Roles.RoleExists("Member")) 
        Roles.CreateRole("Member"); 
       Roles.AddUserToRole(model.Email, "Member"); 
       //**************************************************** 

       await SignInAsync(user, isPersistent: false); 
       // For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771 
       // Send an email with this link 
       // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); 
       // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); 
       // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>"); 

       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       AddErrors(result); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

5) Ich füge

<roleManager enabled="true"> 

in:

<system.web></system.web> 

Wenn ich einen neuen Benutzer erstellen, registrieren sich meine Benutzer gut, aber der Benutzer wird der Rolle nicht hinzugefügt, und wenn ich dies tue VS Erstellen Sie eine neue Datenbank in App_Data mit dem Namen "ASPNETDB.MDF". so fand ich einen neuen Artikel, der über Role Provider-Einstellungen in web.config erklären und:

6) Ich füge

<roleManager enabled="true"> 
    <providers> 
    <clear/> 
    <add name="AspNetSqlRoleProvider" connectionStringName="DefaultConnection" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> 
    </providers> 
</roleManager> 

in:

<system.web></system.web> 

aber wenn ich will neue registrieren Benutzer Ich fand diesen Fehler:

Could not find stored procedure 'dbo.aspnet_CheckSchemaVersion'.

Jetzt denke ich, mein Problem ist, wenn ich Schritt 3 es werde Ich erstelle die Benutzeridentitätsdatenbank und die gespeicherte Prozedur nicht vollständig! Verwende ich die Rolle "Wahr" für MVC 5? Bitte helfen Sie mir, dieses Problem zu lösen!

+1

der Regel Menschen mit niedrigeren rep nicht gesetzt viel Mühe beim Schreiben ihrer Fragen, aber Mann, du bist ein Star !! Upvoted für die Frage Klarheit !! – frenchie

Antwort

9

Wenn Sie

!Roles.RoleExists("Member") 

schreiben Sie nicht mit ASP.NET Identität! Stattdessen sollten Sie ApplicationRole verwenden, damit es die IdentityRole Klasse

erweitert. Darüber hinaus müssen Sie die in Ihrer Konfigurationsdatei nicht mitteilen. Asp.Net Identität ist etwas anderes. In Asp.Net Identity gibt es eine Klasse mit dem Namen ApplicationRoleManager im Ordner App_Start.

Sie sollten Asp.Net Identity nicht verwenden, als wäre es die alte einfache Mitgliedschaft.

Alternativ können Sie auch die Betaversion (die Dinge können sich ändern) von Identity überprüfen, um mehr über Identity zu erfahren.

Hier ist, wie zu starten:

  • ein neues Projekt anlegen: Wählen Sie Leere Vorlage (nicht MVC nicht Webformular)
  • die Asp installieren.Net Identität Probe über nuget

    PM> Install-Package Microsoft.AspNet.Identity.Samples -Pre 
    
  • bearbeiten Namespace Ihr altes Projekt Namespace
  • übereinstimmen Wenn Sie einige Ordner von Ihrem alten Projekt in das neue Projekt kopieren möchten, kopieren Sie Ihre (Controller, Ansichten, ...) nicht die Konfigurationsdateien.

Hier können Sie Rollen erstellen wie folgt:

  var role = new IdentityRole("roleName"); 
      var roleresult = await RoleManager.CreateAsync(role); 

und einen Benutzer bestimmte Rollen zu erstellen und hinzufügen, die Sie verwenden diese

  var user = new ApplicationUser 
      { 
       UserName = "tresorunikin", 
       Email = "[email protected]", 
       EmailConfirmed =true 
      }; 

      var userResult = await UserManager.CreateAsync(user, "[email protected]"); 
      if(userResult.Succeeded){ 
      string[] roles =new string[]{"admin","seller","other"}; 
      var roleResult = await UserManager.AddToRolesAsync(user.Id, roles); 
      if(roleResult.Succeeded){ 
       //Here, user has been added to roles 
      } 
      } 

All dies für Sie getan werden durch Pranav Rastogi Eines der Identity-Teams von Microsoft.

Beachten Sie, dass Sie mit diesen Beispielen eine neue (Beta) Version von System.Web.Mvc zielen, die neuer als System.Web.Mvc 5.0.0.0 ist. Wenn ich mich gut erinnere, ist die Beta-Version System.Web.MVC 5.0. 1.2 oder so ähnlich

Weitere Informationen über die Identität click here

UPDATES Die Version in den Proben ist: System.Web.Mvc 5.2.1.0

+1

FYI MVC 5.2.0 ist seit einer Weile in der Veröffentlichung – trailmax

+0

Vielen Dank Ich aktualisierte meine Antwort – Bellash