Frage Erstellen von Rollen in Asp.net Identity MVC 5


Es gibt sehr wenig Dokumentation über die Verwendung des neuen Asp.net Identity Security Framework.

Ich habe zusammengebaut, was ich konnte, um eine neue Rolle zu erstellen und einen Benutzer hinzuzufügen. Ich habe Folgendes versucht: Fügen Sie Rolle in ASP.NET Identity hinzu

was aussieht, als hätte es die Info von diesem Blog bekommen: Erstellen einer einfachen Aufgabenanwendung mit asp.net-Identität und Verknüpfen von Benutzern mit Aufgaben

Ich habe den Code einem Datenbankinitialisierer hinzugefügt, der immer dann ausgeführt wird, wenn sich das Modell ändert. Es scheitert an der RoleExists Funktion mit folgendem Fehler:

System.InvalidOperationException in mscorlib.dll aufgetreten   Der Entitätstyp IdentityRole ist nicht Teil des Modells für den aktuellen Kontext.

protected override void Seed (MyContext context)
{
    var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
    var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

    // Create Admin Role
    string roleName = "Admins";
    IdentityResult roleResult;

    // Check to see if Role Exists, if not create it
    if (!RoleManager.RoleExists(roleName))
    {
        roleResult = RoleManager.Create(new IdentityRole(roleName));
    }
}

Jede Hilfe wird geschätzt.


75
2017-10-31 02:08


Ursprung


Antworten:


Überprüfen Sie, ob Sie die folgende Unterschrift Ihres MyContext Klasse

public class MyContext : IdentityDbContext<MyUser>

Oder

public class MyContext : IdentityDbContext

Der Code funktioniert für mich, ohne jegliche Änderung !!!


20
2017-10-31 06:25



Auf geht's:

var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));


   if(!roleManager.RoleExists("ROLE NAME"))
   {
      var role = new Microsoft.AspNet.Identity.EntityFramework.IdentityRole();
      role.Name = "ROLE NAME";
      roleManager.Create(role);

    }

66
2017-10-31 10:47



Hier finden Sie den vollständigen Artikel, in dem beschrieben wird, wie Sie mithilfe von ASP.NET Identity eine Rolle erstellen, Rollen ändern, Rollen löschen und Rollen verwalten. Dies beinhaltet auch Benutzerschnittstelle, Controller-Methoden usw.

http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc

Hoffe das helpls

Vielen Dank


22
2018-06-26 01:38



Im ASP.NET 5 rc1-finalIch habe folgendes getan:

Erstellt ApplicationRoleManager (in ähnlicher Weise wie es ist ApplicationUser erstellt von Vorlage)

public class ApplicationRoleManager : RoleManager<IdentityRole>
{
    public ApplicationRoleManager(
        IRoleStore<IdentityRole> store,
        IEnumerable<IRoleValidator<IdentityRole>> roleValidators,
        ILookupNormalizer keyNormalizer,
        IdentityErrorDescriber errors,
        ILogger<RoleManager<IdentityRole>> logger,
        IHttpContextAccessor contextAccessor)
        : base(store, roleValidators, keyNormalizer, errors, logger, contextAccessor)
    {
    }
}

Zu ConfigureServices im Startup.csIch habe es als RoleManager hinzugefügt

services.
    .AddIdentity<ApplicationUser, IdentityRole>()
    .AddRoleManager<ApplicationRoleManager>();

Um neue Rollen zu erstellen, rufen Sie von Configure folgendes:

public static class RoleHelper
{
    private static async Task EnsureRoleCreated(RoleManager<IdentityRole> roleManager, string roleName)
    {
        if (!await roleManager.RoleExistsAsync(roleName))
        {
            await roleManager.CreateAsync(new IdentityRole(roleName));
        }
    }
    public static async Task EnsureRolesCreated(this RoleManager<IdentityRole> roleManager)
    {
        // add all roles, that should be in database, here
        await EnsureRoleCreated(roleManager, "Developer");
    }
}

public async void Configure(..., RoleManager<IdentityRole> roleManager, ...)
{
     ...
     await roleManager.EnsureRolesCreated();
     ...
}

Jetzt können die Regeln dem Benutzer zugewiesen werden

await _userManager.AddToRoleAsync(await _userManager.FindByIdAsync(User.GetUserId()), "Developer");

Oder benutzt in Authorize Attribut

[Authorize(Roles = "Developer")]
public class DeveloperController : Controller
{
}

14
2017-12-20 14:11



Als Verbesserung von Peters Code oben können Sie dies verwenden:

   var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

   if (!roleManager.RoleExists("Member"))
            roleManager.Create(new IdentityRole("Member"));

7
2018-06-09 17:59



Meine Anwendung war beim Start hängen geblieben, als ich die Code-Beispiele von Peter Stulinski & Dave Gordon mit EF 6.0 verwendet habe. Ich habe mich verändert:

var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

zu

var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(**context**));

Das ist sinnvoll, wenn Sie in der Seed-Methode keine Instanz der Instanz instanziieren möchten ApplicationDBContext. Dies könnte durch die Tatsache verstärkt worden sein, dass ich hatte Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer()); im Konstruktor von ApplicationDbContext


3
2018-03-07 04:41



Rollenansicht Modell

public class RoleViewModel
{
    public string Id { get; set; }
    [Required(AllowEmptyStrings = false)]
    [Display(Name = "RoleName")]
    public string Name { get; set; }
}

Controller-Methode

    [HttpPost]
    public async Task<ActionResult> Create(RoleViewModel roleViewModel)
    {
       if (ModelState.IsValid)
       {
           var role = new IdentityRole(roleViewModel.Name);
           var roleresult = await RoleManager.CreateAsync(role);
           if (!roleresult.Succeeded)
           {
               ModelState.AddModelError("", roleresult.Errors.First());
               return View();
           }
           return RedirectToAction("some_action");
       }
       return View();
    }

2
2017-08-27 14:24



Ich wollte eine andere Lösung zum Hinzufügen von Rollen teilen:

<h2>Create Role</h2>

@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<span class="label label-primary">Role name:</span>
<p>
    @Html.TextBox("RoleName", null, new { @class = "form-control input-lg" })
</p>
<input type="submit" value="Save" class="btn btn-primary" />
}

Regler:

    [HttpGet]
    public ActionResult AdminView()
    {
        return View();
    }

    [HttpPost]
    public ActionResult AdminView(FormCollection collection)
    {
        var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));

        if (roleManager.RoleExists(collection["RoleName"]) == false)
        {
            Guid guid = Guid.NewGuid();
            roleManager.Create(new IdentityRole() { Id = guid.ToString(), Name = collection["RoleName"] });
        }
        return View();
    }

0
2018-02-25 21:04



    public static void createUserRole(string roleName)
    {
        if (!System.Web.Security.Roles.RoleExists(roleName))
        {
            System.Web.Security.Roles.CreateRole(roleName);
        }
    }

0
2017-12-07 08:59



Die Methode, die ich für die Erstellung von Rollen verwende, ist unten aufgeführt. Sie werden auch Benutzern in Code zugewiesen. Der folgende Code befindet sich in "configuration.cs" im Migrationsordner.

string [] roleNames = { "role1", "role2", "role3" };
var RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

                IdentityResult roleResult;
                foreach(var roleName in roleNames)
                {
                    if(!RoleManager.RoleExists(roleName))
                    {
                        roleResult = RoleManager.Create(new IdentityRole(roleName));
                    }
                }
                var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context));
                UserManager.AddToRole("user", "role1");
                UserManager.AddToRole("user", "role2");
                context.SaveChanges();

0
2018-01-13 13:30