2017-04-17 2 views
0

Ich arbeite an einem Controller in meinem Projekt. Ich versuche, die folgendes zu tun:Konvertieren von IdentityUserRole in IdentityRole (ASP.NET-Core)

string role = "something"; 
var newRole = new IdentityRole(); 

newRole = _DbContext.Roles.Where(r => r.Name == role).FirstOrDefault().; 
user.Roles.Add(newRole); 

Offenbar user.Roles.Add() nimmt nur einen IdentityUserRole als Parameter, aber newrole ist vom Typ IdentityRole. Wie kann ich von einem zum anderen konvertieren? Gibt es einen alternativen Weg, um das zu erreichen, was ich tun möchte?

Explizites Casting funktioniert nicht.

+0

Versuchen Sie, der Datenbank eine Rolle hinzuzufügen oder einem Benutzer eine Rolle hinzuzufügen? – DavidG

+0

Dem Benutzer eine Rolle hinzufügen –

Antwort

1

Betrachten wir ein Usermanager

Im Allgemeinen verwenden, würden Sie die AddToRoleAsync() Methode von UserManager Objekt verwenden, Zuweisen von Rollen für Ihre Benutzer zu handhaben, da sie direkt auf das Benutzerobjekt auf das Hinzufügen selbst gegenüber.

// Example of instantiating the User Manager 
private readonly UserManager<ApplicationUser> _userManager; 
public AccountController(UserManager<ApplicationUser> userManager) 
{ 
     _userManager = userManager; 
} 

// Example of adding a user to a given role 
public void AddUserToRole(string userId, string role) 
{ 
     var user = _userManager.FindByIdAsync(userId); 
     if (user != null) 
     { 
      await _userManager.AddToRoleAsync(user, role); 
     } 
} 

Die Usermanager-Klasse ist dafür verantwortlich, dass alle Beziehungen oder Informationen über Benutzer korrekt erstellt, aktualisiert und beharrten wie nötig, es ist so allgemein diese Art von Aufgaben, um es zu delegieren bevorzugt.

In Bezug auf direkte Conversions

Im Hinblick auf eine direkte Umwandlung, könnten Sie einen ähnlichen Ansatz wie DavidG's response und einfach die Id aus dem User verwenden verwenden und die Rolle, ein Objekt zu bauen und sie den Benutzer hinzuzufügen.

+0

Ich dachte, ich würde das 'UserManager'-Zeug Ihnen überlassen, gute Antwort! – DavidG

0

Das IdentityUserRole Objekt ist da, um einen Benutzer mit einer Rolle zu verknüpfen, Sie müssen nur eine neue Instanz davon erstellen. Sie müssen auch die ID der Rolle, die Sie hinzufügen, zum Beispiel:

var roleName = "something"; 
var role = _DbContext.Roles.Single(r => r.Name == roleName); 
var userRole = new IdentityUserRole 
{ 
    UserId = user.Id, 
    RoleId = role.Id 
}; 

user.Roles.Add(userRole); 

Allerdings sollten Sie wirklich die UserManager Klasse für diese verwendet werden. Es hat eine AddToRoleAsync Methode, die dies für Sie behandelt.

Wenn Sie die asynchrone Methode wirklich nicht verwenden möchten, sind nicht asynchrone Erweiterungen verfügbar. https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx

Verwandte Themen