2016-12-05 4 views
2

Здесь мне нужно указать текущие роли пользователя, например, если у меня много ролей, таких как admin, operator, editor, writer и т. Д., А одно имя пользователя (userone) - в роли буксировки, как я буду быть в состоянии перечислить роли, как:MVC 5 получить текущий пользователь RoleNames

user name : userone 
roles  : editor,writer 

для этого я нашел этот код, но есть ли простой или лучше сделать:

  UserManager<ApplicationUser> UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db)); 
      RoleManager<IdentityRole> RoleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(db));  
      string name = User.Identity.Name; 
      string id = UserManager.FindByName(name).Id; 
      IList<string> roleNames = UserManager.GetRoles(id); 
      string selectedRoleName = ""; 

      foreach (var item in roleNames) 
      { 
       ViewBag.selectedRoleName += item + ","; 
       selectedRoleName += item + ","; 
      } 

точно в виду вы должны вызвать ViewBag.selectedRoleName

так вот, если посмотреть есть (,) дополнительно в фамилиях роли, просто поиск лучшего способа сделать это заранее спасибо

+0

Если вы хотите объединить ролевые имена, используйте 'String.Join': ' string.Join (",", roleNames.ToArray()); ' – Marco

ответ

0

Здесь Вид:

public class UsersAdminController : Controller 
{ 
    public UsersAdminController() 
    { 
    } 

    public UsersAdminController(ApplicationUserManager userManager, ApplicationRoleManager roleManager) 
    { 
     UserManager = userManager; 
     RoleManager = roleManager; 
    } 

    private ApplicationUserManager _userManager; 
    public ApplicationUserManager UserManager 
    { 
     get 
     { 
      return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
     } 
     private set 
     { 
      _userManager = value; 
     } 
    } 

    private ApplicationRoleManager _roleManager; 
    public ApplicationRoleManager RoleManager 
    { 
     get 
     { 
      return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); 
     } 
     private set 
     { 
      _roleManager = value; 
     } 
    } 

    public async Task<ActionResult> Details(string id) 
    { 
     if (id == null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 
     var user = await UserManager.FindByIdAsync(id); 

     ViewBag.RoleNames = await UserManager.GetRolesAsync(user.Id); 

     return View(user); 
    } 
    } 

А вот вид:

@model YourApp.Models.ApplicationUser 
<div class="page-header"> 
</div> 
<div> 
<dl class="dl-horizontal"> 
<dt> 
@Html.DisplayNameFor(model => model.UserName) 
</dt> 
<dd> 
@Html.DisplayFor(model => model.UserName) 
</dd> 
</dl> 
</div> 
<table class="table"> 
@foreach (var item in ViewBag.RoleNames) 
{ 
    <tr> 
     <td> 
      @item 
     </td> 
    </tr> 
} 
</table> 
Смежные вопросы