Создание ролей в Asp.net идентичность MVC 5
существует очень мало документации об использовании нового Asp.net структура безопасности идентификации.
я собрал все, что мог, чтобы попытаться создать новую роль и добавить к ней пользователя. Я попробовал следующее: добавить роль в ASP.NET идентичность
который выглядит так, как будто он, возможно, получил информацию из этого блога: создание простого приложения для работы с asp.net идентификация и связывание пользователей с to-does
я добавил код в a Инициализатор базы данных, который запускается при каждом изменении модели. Он терпит неудачу на
10 ответов:
убедитесь, что у вас есть следующая подпись вашего
MyContext
класс
public class MyContext : IdentityDbContext<MyUser>
или
public class MyContext : IdentityDbContext
код работает для меня без каких-либо изменений!!!
поехали:
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); }
вот Полная статья, описывающая, как создавать роли, изменять роли, удалять роли и управлять ролями с помощью ASP.NET личность. Это также содержит пользовательский интерфейс, методы контроллера и т. д.
http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc
надеюсь, это поможет
спасибо
на
ASP.NET 5 rc1-final
, Я сделал следующее:создано
ApplicationRoleManager
(таким же образом, как естьApplicationUser
создано по шаблону)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) { } }
до
ConfigureServices
наStartup.cs
, я добавил его как RoleManagerservices. .AddIdentity<ApplicationUser, IdentityRole>() .AddRoleManager<ApplicationRoleManager>();
для создания новых ролей, звоните из
Configure
следующее: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(); ... }
теперь правила могут быть назначены пользователю
await _userManager.AddToRoleAsync(await _userManager.FindByIdAsync(User.GetUserId()), "Developer");
или в
Authorize
атрибут[Authorize(Roles = "Developer")] public class DeveloperController : Controller { }
в качестве улучшения кода Петерса выше вы можете использовать это:
var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext())); if (!roleManager.RoleExists("Member")) roleManager.Create(new IdentityRole("Member"));
мое приложение зависало при запуске, когда я использовал примеры кода Питера Стулински и Дэйва Гордона с EF 6.0. Я изменил:
var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(new ApplicationDbContext()));
до
var roleManager = new RoleManager<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>(new RoleStore<IdentityRole>(**context**));
что имеет смысл, когда в методе seed вы не хотите создавать другой экземпляр
ApplicationDBContext
. Это могло бы быть усугублено тем фактом, что яDatabase.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
в конструктореApplicationDbContext
Роли Модели
public class RoleViewModel { public string Id { get; set; } [Required(AllowEmptyStrings = false)] [Display(Name = "RoleName")] public string Name { get; set; } }
метод контроллера
[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(); }
Я хотел поделиться другим решением для добавления ролей:
:<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" /> }
[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(); }
public static void createUserRole(string roleName) { if (!System.Web.Security.Roles.RoleExists(roleName)) { System.Web.Security.Roles.CreateRole(roleName); } }
метод, который я использую для создания ролей ниже, назначение их пользователям в коде также перечислено. приведенный ниже код находится в " конфигурации.cs " в папке миграции.
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();