Существует очень мало документации об использовании новой системы безопасности Asp.net идентичности.
Я соединил, что я мог бы попробовать и создать новые роли и добавить в нее пользователя. Я попробовал следующий: https://stackoverflow.com/questions/19541101/add-role-in-asp-net-identity
который выглядит как он, возможно, получил информацию из этого блога: создание простых приложений с идентичностью ASP.NET и связать пользователей с К-А
Я добавил код в инициализатор базы данных, который выполняется всякий раз, когда модель изменяется. Он не на функцию RoleExists
со следующей ошибкой:
система
.Исключение InvalidOperationException
произошел в mscorlib.dll Сущность IdentityRole тип не является частью модели для текущего контекста.
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));
}
}
Любая помощь приветствуется.
Здесь мы идем:
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
Надеюсь, что это helpls
Спасибо
В ASP.NET 5 ник1-финал, я сделал следующее:
Создан 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 " в " автозагрузки.в CS, я добавил его в качестве rolemanager сведения о
services.
.AddIdentity<ApplicationUser, IdentityRole>()
.AddRoleManager<ApplicationRoleManager>();
Для создания новых ролей, звонок от "настройка" следующие:
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(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"));
Моя заявка висит при запуске, когда я использовал Питер Stulinski & Дэйв Гордон's код образцов с 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**));
Какой смысл, когда в методе семя, вы не'т хотите, чтобы инстанцировать другой экземпляр ApplicationDBContext
. Это, возможно, усугубляется тем, что у меня были базы данных.SetInitializerконструктор
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" в папке migrations.
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();
Если вы используете шаблон по умолчанию, который создается, когда вы выбираете новое веб-приложение ASP.NET и некоторые отдельные учетные записи пользователей, проверки подлинности и пытается создать пользователей с ролями, так вот решение. В учетной записи контроллера'Register метод, который вызывается с помощью [протоколы HttpPost], добавьте следующие строки В если
.
с помощью Microsoft.Паш.Идентичности.И EntityFramework;
var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
{
var roleStore = new RoleStore<IdentityRole>(new ApplicationDbContext());
var roleManager = new RoleManager<IdentityRole>(roleStore);
if(!await roleManager.RoleExistsAsync("YourRoleName"))
await roleManager.CreateAsync(new IdentityRole("YourRoleName"));
await UserManager.AddToRoleAsync(user.Id, "YourRoleName");
await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);
return RedirectToAction("Index", "Home");
}
Это позволит создать сначала создать роль в вашей базе данных, а затем добавить созданного пользователя в эту роль.