2017-12-08 13 views
0

내 관리 사용자에게 관리 역할을 부여하는 데 문제가 있습니다. 일단 사용자를 생성하고 성공하면 AddToRoleAsync와 함께 관리 역할을 추가하려고 시도합니다. 그러나 왜 그것이 추가되지 않는지 나는 확신하지 못한다. 그런 다음 관리자에게 관리자 역할이없는 경우 관리자가 추가 할 수 있도록 확인을 시도했습니다. 명령이 실행되는 것처럼 보이지만 데이터베이스에 추가 된 것을 볼 수 없습니다. 당신은 전체 DbIntilizer를 원하거나 더 많은 코드가 알려 경우시드 관리 데이터베이스 역할 추가하지 않음

public async Task CreateAdmin() 
{ 
     // Add roles 
     string[] roles = new string[] {"Administrator", "User"}; 
     foreach(string role in roles) 
     { 
      bool result = await _roleManager.RoleExistsAsync(role); 
      if(!result) 
      { 
       await _roleManager.CreateAsync(new IdentityRole(role)); 
      } 
     } 

     // Add admin user 
     if (!_context.Users.Any(u => u.UserName == "Admin")) 
     { 
      var user = new Users 
      { 
       Email="[email protected]", 
       NormalizedEmail="[email protected]", 
       UserName="[email protected]", 
       NormalizedUserName="ADMIN", 
       EmailConfirmed = true, 
      }; 
      var result = await _userManager.CreateAsync(user, "Password123"); 
     } 

     var adminuser = await _userManager.FindByEmailAsync("[email protected]"); 
     bool flag = await _userManager.IsInRoleAsync(adminuser, "Administrator"); 
     if(!flag) 
     { 
      var role = await _roleManager.FindByNameAsync("Administrator"); 
      await _userManager.AddToRoleAsync(adminuser, "Administrator"); 
      } 
    } 

:

내 코드입니다.

누구나 내가 뭘 잘못하고 있는지 알아?

편집 이 http://www.locktar.nl/programming/net-core/seed-database-users-roles-dotnet-core-2-0-ef/ 를 따라 그것을 재 작업 지금은 작동합니다.

답변

2

이것은 내가하는 방법입니다.

public async Task InitializeDatabase(IApplicationBuilder app) 
    { 
     using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope()) 
     { 
      // Create DB 
      serviceScope.ServiceProvider.GetRequiredService<ApplicationDbContext>().Database.Migrate(); 

      // Add roles 
      var roleManager = serviceScope.ServiceProvider.GetRequiredService<RoleManager<IdentityRole<long>>>(); 
      if (!roleManager.Roles.Any()) 
      { 
       foreach (var role in Config.GetTestRolls()) 
       { 
        await roleManager.CreateAsync(role); 
       } 
      } 

      // Add users 
      var userManager = serviceScope.ServiceProvider.GetRequiredService<UserManager<ApplicationUser>>(); 
      if (userManager.Users.Any()) return; 
      foreach (var user in Config.GetTestUsers()) 
      { 
       await userManager.CreateAsync(user, "Password123!"); 
      } 

      // find first user add to first role (hack) 
      var adminUser = await userManager.FindByEmailAsync(Config.GetTestUsers().FirstOrDefault()?.Email); 
      if (adminUser != null) 
      { 
       await userManager.AddToRoleAsync(adminUser, Config.GetTestRolls().FirstOrDefault()?.Name); 
      } 


     } 

코드 내 GitHub의 프로젝트에서 빼낸는 당신이 내가 찾은 링크보다 약간 더 here

+2

감사를 발견했다. 나는 이것을 대신 사용할 것이다. – bu3alwa