2016-05-31 9 views
3

Как я могу получить роль пользователя/s в mvc 6? Я хочу, чтобы получить подробную информацию роли, как только пользователь входит в в приложение, но используя следующий код, я не в состоянии восстановить детали ролиПолучить роль/роль текущего пользователя в MVC 6

public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null) 
    { 
     ViewData["ReturnUrl"] = returnUrl; 
     if (ModelState.IsValid) 
     { 

      var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false); 

      if (result.Succeeded) 
      { 
       _logger.LogInformation(1, "User logged in."); 

       bool available = User.IsInRole("Admin"); 
       return RedirectToLocal(returnUrl); 
      } 
      if (result.RequiresTwoFactor) 
      { 
       return RedirectToAction(nameof(SendCode), new { ReturnUrl = returnUrl, RememberMe = model.RememberMe }); 
      } 
      if (result.IsLockedOut) 
      { 
       _logger.LogWarning(2, "User account locked out."); 
       return View("Lockout"); 
      } 
      else 
      { 
       ModelState.AddModelError(string.Empty, "Invalid login attempt."); 
       return View(model); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

Кроме того, я использовал следующие методы, как

var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; 

var userRoles = await _userManager.GetRolesAsync(user); 

Тем не менее, я не могу получить детали роли. Может ли кто-нибудь помочь в этом?

+0

Вы должны получить пользователя из базы данных. Вы не можете просто создать новый экземпляр пользователя и заполнить некоторые свойства. –

ответ

8

Вы можете рассмотреть вопрос о попытке загрузить фактический ApplicationUser объект с помощью или какого-либо другого способа FindByEmail() и передач этого объекта в метод GetRolesAsync(), как показано ниже:

// Resolve the user via their email 
var user = await _userManager.FindByEmailAsync(model.Email); 
// Get the roles for the user 
var roles = await _userManager.GetRolesAsync(user); 

Более полный пример может выглядеть следующим образом:

[HttpPost("Auth/SignIn")] 
[ValidateAntiForgeryToken] 
public async Task<IActionResult> SignIn(SignInViewModel model, string returnUrl = null) 
{ 
     ViewData["ReturnUrl"] = returnUrl; 
     if (ModelState.IsValid) 
     { 
      var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, true, false); 
      if (result.Succeeded) 
      { 
       // Resolve the user via their email 
       var user = await _userManager.FindByEmailAsync(model.Email); 
       // Get the roles for the user 
       var roles = await _userManager.GetRolesAsync(user); 

       // Do something with the roles here 
      } 
      else 
      { 
       // Uh oh.... 
      } 
     } 

     // Something is probably wrong, provide the form again.... 
     return View(model); 
} 
+0

Как я могу получить идентификатор роли? – Rohit

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