دسته بندی ها
14:56 1400/08/25

بدست آوردن تعداد کاربران یک نقش در Asp.net core identity

مشخصات سوال کننده :
کاربر : Mammadq     امتیاز کاربر : 0     رتبه کاربر : 7084
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2507
هوش مصنوعی

پاسخ هوش مصنوعی

برای بدست آوردن تعداد کاربران یک نقش خاص در ASP.NET Core Identity، می توانید از کد زیر استفاده کنید. فرض کنید شما یک کنترلر دارید که به داده های نقش ها دسترسی دارد و همچنین به وابستگی های UserManager و RoleManager دسترسی دارید.

ابتدا مطمین شوید که RoleManager و UserManager به کنترلر شما منتقل شده اند:

public class RolesController : Controller
{
    private readonly RoleManager _roleManager;
    private readonly UserManager _userManager;

    public RolesController(RoleManager roleManager, UserManager userManager)
    {
        _roleManager = roleManager;
        _userManager = userManager;
    }
}

حال می توانید در متد ایندکس، تعداد کاربران هر نقش را به دست آورید و در View نمایش دهید:

public async Task Index()
{
    var roles = _roleManager.Roles.ToList();
    var roleUserCounts = new List();

    foreach (var role in roles)
    {
        var usersInRole = await _userManager.GetUsersInRoleAsync(role.Name);
        roleUserCounts.Add(new RoleUserCount
        {
            RoleName = role.Name,
            UserCount = usersInRole.Count()
        });
    }

    return View(roleUserCounts);
}

public class RoleUserCount
{
    public string RoleName { get; set; }
    public int UserCount { get; set; }
}

در اینجا ما یک کلاس به نام RoleUserCount تعریف کردیم که شامل نام نقش و تعداد کاربران است. سپس این اطلاعات را به View ارسال می کنیم.

در View خود، می توانید اطلاعات را به شکل زیر نمایش دهید:

@model List


        @foreach (var role in Model)
        {
            
        }
    
نقش تعداد کاربران
@role.RoleName @role.UserCount
به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : hamid_b 13:30 1400/08/26

بدست آوردن تعداد کاربران هر نقش در Asp net Core Identity

ببینید در آیدنتیتی یه جدول به نام AspNetRoles هست که لیست نقش های شما توی این جدول نگهداری میشه. یه جدول هم که AspNetUserRoles هست که لیست کاربران به همراه نقش اون کاربر رو نگهداری میکنه. شما میتونه از ترکیب این دو جدول تعداد کاربران هر نقش رو بدست بیارید.

Select Count(*),UR.RoleId,R.Name
From AspNetUserRoles UR Join AspNetRoles R 
on UR.RoleId = R.Id 
Group By UR.RoleId,R.Name

خروجی کوئری بالا مشابه تصویر زیر هست :

 

نمایش تعداد کاربران هر نقش در Identity

 

در تصویر بالا می بینید که مثلا تعداد کاربران Student برابر با 5 نفر هست.

به این پاسخ امتیاز بدهید    0
امتیاز: 518 رتبه: 4
پاسخ دهنده : fateme 14:01 1400/08/26

اگر بخواید از طریق دستورات انتیتی فریم ورک هم میتونید تعداد کاربران هر نقش رو نمایش بدید.

var result = (from ur in _cxt.UserRoles
join r in _cxt.Roles on ur.RoleId equals r.Id
group new { ur, r } by new { ur.RoleId } into grp
select new { name = grp.Key, count = grp.Count() }).ToList();

در مثال بالا _cxt همون DbContext شما هست. در متغیر result لیست همه نقش ها و تعداد کاربران اونها نمایش داده میشه.

به این پاسخ امتیاز بدهید    0
امتیاز: 1635 رتبه: 2
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود