2016-02-01 2 views
0

Я пишу простое приложение MVC6, использующее EF7 для передачи данных, и у меня возникают проблемы с настройкой пользователя и требований. В частности, у меня есть процедура посева базы данных, чтобы заполнить таблицы идентификации в базе данных конкретным пользователем (мной), у которого есть конкретные требования. Этот метод посева вызывается изнутри startup.cs.MVC6/EF7: Главный пользователь и заявки на размещение

Это довольно просто:

public static async Task CreateMasterUser(UserManager<ApplicationUser> userMgr, ILogger logger) 
    { 
     var user = await userMgr.FindByEmailAsync("my email"); 

     if(user == null) 
     { 
      user = new ApplicationUser() 
      { 
       Email = "my email", 
       FirstName = "blah", 
       LastName = "blah", 
       UserName = "Blah", 
      }; 

      IdentityResult result = await userMgr.CreateAsync(user, "mypw"); 

      if(!result.Succeeded) 
      { 
       logger.LogCritical("Failed to create master user. Messages were: " + String.Join("; ", result.Errors.Select(x => x.Description))); 
       return; 
      } 
     } 

     await AddClaim(user, userMgr, "user.add", "allowed"); 
     await AddClaim(user, userMgr, "user.delete", "allowed"); 
     await AddClaim(user, userMgr, "user.edit.self", "allowed"); 
     await AddClaim(user, userMgr, "user.edit.all", "allowed"); 
     await AddClaim(user, userMgr, "user.confirm", "allowed"); 
     await AddClaim(user, userMgr, "content.add", "allowed"); 
     await AddClaim(user, userMgr, "content.view", "allowed"); 
     await AddClaim(user, userMgr, "content.edit", "allowed"); 
     await AddClaim(user, userMgr, "content.delete", "allowed"); 
    } 

    private static async Task AddClaim(ApplicationUser user, UserManager<ApplicationUser> userMgr, string claim, string value) 
    { 
     if(user.Claims.SingleOrDefault(x => x.ClaimType == claim) == null) 
      await userMgr.AddClaimAsync(user, new Claim(claim, value)); 
    } 

Но есть проблема с претензиями раздела: каждый раз, когда сайт стартует новый набор требований добавляется для меня (то есть, дублируют требования создаются для того же пользователь).

Когда я просматриваю код, user.Claims никогда не имеет записей, даже если база данных (SQL-сервер) показывает записи в AspNetUserClaims для соответствующего пользователя.

Похоже, что коллекция Claims не заполняется из базы данных FindEmailAsync.

Как это сделать?

ответ

1

Ознакомьтесь с методом GetClaimsAsync UserManager. Явно заполнить коллекцию Claims.

user.Claims = await userMgr.GetClaimsAsync(user); 
+0

Thanx! У меня есть привычка полагаться на «автоматическую» ленивую загрузку в EF или включение операторов «include()» в свой код при построении запросов, поэтому я забыл, что записи дочерних таблиц, например, заявления, не включаются автоматически. –

+0

Рад, что сработало для вас. – mcbowes

Смежные вопросы