Asp.net Identity MVC 5에서 역할 만들기
새로운 Asp.net Identity Security Framework 사용에 대한 문서는 거의 없습니다.
새로운 역할을 만들고 여기에 사용자를 추가 할 수있는 방법을 모았습니다. 다음을 시도했습니다. ASP.NET ID에 역할 추가
이 블로그에서 정보를 얻은 것 같습니다 : asp.net ID를 사용하여 간단한 할 일 애플리케이션을 구축하고 사용자를 할 일과 연결
모델이 변경 될 때마다 실행되는 데이터베이스 이니셜 라이저에 코드를 추가했습니다. RoleExists
다음 오류와 함께 함수에서 실패합니다 .
System.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));
}
}
도움을 주시면 감사하겠습니다.
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 Identity를 사용하여 역할을 만들고, 역할을 수정하고, 역할을 삭제하고, 역할을 관리하는 방법을 설명하는 전체 문서입니다. 여기에는 사용자 인터페이스, 컨트롤러 메서드 등도 포함됩니다.
http://www.dotnetfunda.com/articles/show/2898/working-with-roles-in-aspnet-identity-for-mvc
이 helpls 희망
감사
에서는 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
, 나는으로 roleManager로 추가
services.
.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
{
}
위의 Peters 코드에 대한 개선으로 다음을 사용할 수 있습니다.
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에서 Peter Stulinski & Dave Gordon의 코드 샘플을 사용할 때 내 애플리케이션이 시작시 중단되었습니다. 나는 변했다 :
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
있습니다. 이것은 내가 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);
}
}
역할을 만드는 데 사용하는 방법은 다음과 같으며 코드에서 사용자에게 할당하는 방법도 나열되어 있습니다. 아래 코드는 migrations 폴더의 "configuration.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();
If you are using the default template that is created when you select a new ASP.net Web application and selected Individual User accounts as Authentication and trying to create users with Roles so here is the solution. In the Account Controller's Register method which is called using [HttpPost], add the following lines in if condition
.
using Microsoft.AspNet.Identity.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");
}
This will create first create a role in your database and then add the newly created user to this role.
참고URL : https://stackoverflow.com/questions/19697226/creating-roles-in-asp-net-identity-mvc-5
'programing' 카테고리의 다른 글
PHP 파일에서 반환 배열을로드하는 방법은 무엇입니까? (0) | 2020.10.05 |
---|---|
Python에서 문자열이 대문자, 소문자 또는 대소 문자 혼합인지 확인 (0) | 2020.10.05 |
Postgis 설치 : "지오메트리"유형이 없습니다. (0) | 2020.10.04 |
한 줄의 머리와 꼬리 (0) | 2020.10.04 |
CSS를 사용하여 Div를 2 개의 열로 분할 (0) | 2020.10.04 |