2016-08-27 2 views
2

작동하는 솔루션을 찾을 수 없습니다 ... 모든 Google 결과를 시도했습니다. 나는 이것을 몇 시간 동안 설명하고있다. 나는 그렇게 추한 생각과 정말 최악의 내가 할 수있는관리자 역할 (내 솔루션)을 추가하는 방법

insert into [dbo].[AspNetRoles] ([Id] 
     ,[ConcurrencyStamp] 
     ,[Name] 
     ,[NormalizedName]) 
values(1,NULL,'Admin','Admin') ; 

Insert into [dbo].[AspNetUserRoles] ( [UserId] 
     ,[RoleId]) 
VALUES('user_id_from_[dbo].[AspNetUsers]' , 1) 

하지만 일하고 :

그래서 난 그냥 함께 SQL 테이블에 나의 새로운 역할을 삽입합니다. SO에

용액으로 표시 한 대답입니다 : Asp.Net core MVC6 How to initially add roles in Identity 3

하지만 난 정말 제대로 Startup.cs 년으로 roleManager를 초기화하는 방법 구글에서 답을 찾고 후 아무 생각이 없습니다.

나는 그것이 정말로 그렇게 어렵지 않다고 생각한다. 나는 실마리가없는 것 같아.

답변

5

일반적으로 관리 역할은 스키마를 만드는 동안 데이터베이스에 시드됩니다. ID를 사용하여 관리자 역할을 만들거나 시드합니다. Identity는 Code-First 방식을 사용하므로 가능한 한 많이 사용자 정의 할 수 있습니다. SQL 쿼리를 수동으로 사용하지 마십시오. 아래는 EFCore가 Seeding 데이터에 대한 내장 지원을 아직 지원하지 않기 때문에 DI를 사용하여 Admin User 관리자 권한 데이터를 런타임에 만들 수있는 방법입니다 (업데이트에서 지원됨).

데이터를 시드하려면 데이터 폴더에 클래스 (예 : AdministratorSeedData.cs)를 만들고 다음 코드를 추가하십시오.

public void ConfigureServices(IServiceCollection services) 
    { 
     .... 
     services.AddTransient<AdministratorSeedData>(); 
    } 

public async void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, AdministratorSeedData seeder) 
    { 
     .... 
     await seeder.EnsureSeedDataAsync(); 
    } 

가 만든 어떤 데이터베이스가 없는지 확인 :
public class AdministratorSeedData 
{ 
    private RoleManager<IdentityRole> _roleManager; 
    private UserManager<ApplicationUser> _userManager; 

    public AdministratorSeedData(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager) 
    { 
     _userManager = userManager; 
     _roleManager = roleManager; 
    } 

    public async Task EnsureSeedDataAsync() 
    { 
     if (await _userManager.FindByEmailAsync("[email protected]") == null) 
     { 
      ApplicationUser administrator = new ApplicationUser() 
      { 
       UserName = "[email protected]", 
       Email = "[email protected]" 
      }; 

      await _userManager.CreateAsync(administrator, "Passw0rd123!"); 
      await _roleManager.CreateAsync(new IdentityRole("Administrator")); 

      IdentityResult result = await _userManager.AddToRoleAsync(administrator, "Administrator"); 
     } 
    } 
} 

그런 다음 Startup.cs 클래스에서, 같은 DI 컨테이너에이 서비스를 등록합니다. 응용 프로그램을 실행하면 관리자 역할이있는 사용자가 성공적으로 만들어 졌음을 알 수 있습니다.

관련 문제