2016-03-29 19 views
1

içinde rolleri ile kullanıcı olsun Mvc içinde sadece Role kullanıcılarıalmak istiyorum, ben her şeyi denedim. Bildiğiniz gibi AspNetUserRoles bir haritalama tablosudur (çoktan çoğa), bu nedenle EDMX'te üretilmez (tasarıma göre, birincil anahtarı yoktur). Ayrıca Rol tablosu (?) kullanamıyoruz. Lütfen benim modelimi göz önünde bulundurun. İşte sadece mvc 5

benim son denemede:

public async Task<ActionResult> Roles() 
    { 
     var list = context.Users.Include(u => u.Roles); 
     var user = new List<ApplicationUser>(); 
     foreach(var u in list) 
     { 
      if(u.Roles!= null) 
      { 
       user.Add(u); 
      } 
     }  
     return View(user); 
    } 

ve burada benim görünümdür:

@model IEnumerable<Site.Models.ApplicationUser> 
     @{ 
     Layout = null; 
     } 

     <h2>List of users with Roles:</h2> 
     <table class="table"> 
     <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.UserName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Email) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Roles) 
     </th> 
    </tr> 
    @foreach (var item in Model) 
    { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Email) 
     </td> 
     <th> 
      @Html.DisplayFor(modelItem => item.Roles) 
     </th> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id = item.Id }) | 
      @Html.ActionLink("Details", "Details", new { id = item.Id }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.Id }) 
     </td> 
    </tr> 
    } 
    </table> 
+0

Peki sorun nedir? Kullanıcılara herhangi bir rol almıyor musunuz? – Marius

+0

Sadece Role kullanıcıları almak istiyorum ama bu kod tüm kullanıcıları olsun. – V47

+0

Ya eğer (u.Roles! = Null) ''ı (if (u.Roles.Any())' olarak değiştirirseniz? – Hendry

cevap

0

bu bir deneyin:

var usersList = new List<ApplicationUser>(); 
    foreach (ApplicationUser user in UserManager.Users) 
    { 
     var roles = await UserManager.GetRolesAsync(user.Id); 
     if(roles.contains("Admin")) 
     { 
      usersList.Add(user); 
     } 
    } 

sadece sahiptir kullanıcıları dönmelidir Bu seferki Yönetici rolü. Umut ediyorum bu yardım eder.

+0

belirtmiyorsunuz, bu kod benimkiyle aynı ve tüm kullanıcılara geri dönüyor! – V47

+0

Yani belki tüm kullanıcıların en azından bir rolü var? ;) Hata ayıklamayı denediniz mi, kullanıcı herhangi bir rolü olmadığında ne iade ediliyor? – Marius

+0

Sitemde ve AspNetRoller tablosunda sadece yönetici rolüm var – V47

0

Belirli bir role dayanarak sorgulamanız gerektiğini düşünüyorum. Çünkü daha sonra başka roller eklerseniz, uygulamanız buggy olacaktır.

public async Task<ActionResult> Roles() 
    { 
     var user= context.Users.Include(u => u.Roles).Where(u=>u.Roles.Any(r=>r.Name=="RoleName")).ToList(); 
     return View(user); 
    }