شخصی سازی identity

سلام به همه 

تا حالا شده وقتی دارین از سیستم identityبرای احراز هویت وبسایتتون یا نرم افزارتون استفاده میکنین 

ببینین که یه جاهایی دستتون بستست برای مثال وقتی میخواین کاربراتون رو با نقشی که توی سیستم دارن با یه دستو توی یه .جدول نشون بدین تو این مقاله میخوایم بریم این مشکل رو حل کنیم 

 

 

 

 

دیده شده برو بچه هایی که با این مشکل مواجه میشن میرن میگن اقا ما خودمون سیستم احراز هویت شخصیمون رو میسازیم که دستمون باز باشه و این حرفا ولی واقعا نیازی به اختراع دوباره چرخ نیست و شما هرچی هم حرفه ای بنویسین سیستم رو قطعا نمیشه با سیستمی که تحت نظر مایکروسافت توسعه داده میشه رقابت کنه 

خب بریم که داشته باشیم گام های خودمون رو برای شخصی سازی

1. تعریف کلاس‌های Identity سفارشی

public class ApplicationUser : IdentityUser
{
 public ICollection UserRoles { get; set; }
}

public class ApplicationRole : IdentityRole
{
 public ICollection UserRoles { get; set; }
}

سپس، کلاس UserRoles را تعریف کنید که از IdentityUserRole ارث‌بری می‌کند.

public class UserRoles : IdentityUserRole
{
 public virtual ApplicationUser User { get; set; }
 public virtual ApplicationRole Role { get; set; }
}

2. پیکربندی DbContext

در کلاس ApplicationDbContext، روابط بین کاربران و نقش‌ها را پیکربندی کنید.

public class ApplicationDbContext : IdentityDbContext, UserRoles, IdentityUserLogin, IdentityRoleClaim, IdentityUserToken>
{
 public ApplicationDbContext(DbContextOptions options)
 : base(options)
 {
 }

 protected override void OnModelCreating(ModelBuilder builder)
 {
 base.OnModelCreating(builder);

 builder.Entity(userRole =>
 {
 userRole.HasKey(ur => new { ur.UserId, ur.RoleId });

 userRole.HasOne(ur => ur.Role)
 .WithMany(r => r.UserRoles)
 .HasForeignKey(ur => ur.RoleId)
 .IsRequired();

 userRole.HasOne(ur => ur.User)
 .WithMany(u => u.UserRoles)
 .HasForeignKey(ur => ur.UserId)
 .IsRequired();
 });
 }
}

به نوع تعریف dbcontext اینحا خیلی دقت کنید که چطوری داره از identity ارث بری میکنه 

3. اجرای مایگریشن

پس از به‌روزرسانی مدل‌ها و DbContext، دستورات زیر را برای به‌روزرسانی ساختار دیتابیس اجرا کنید:

Add-Migration AddCustomUserRoles
Update-Database

4. کوئری برای دریافت کاربران با نقش‌ها

اکنون می‌توانید با استفاده از Include و ThenInclude، کاربران با نقش‌های آن‌ها را کوئری کنید.

 public async Task> GetAllUsersWithRolesAsync()
 {
 var usersWithRoles = await _context.Users
 .Include(u => u.UserRoles)
 .ThenInclude(ur => ur.Role)
 .Select(u => new UserWithRolesDto
 {
 UserId = u.Id,
 UserName = u.UserName,
 Roles = u.UserRoles.Select(ur => ur.Role.Name).ToList()
 })
 .ToListAsync();

 return usersWithRoles;
 }

به همین راحتی حالا میتونید جدول شخصی سازی شده role داشته باشید و مواردی که خودتون دلتون میخواد هم بهش اضافه کنید


مقاله برنامه نویسی پیمان دهقان ۷۷
تفاوت hashset و list
تفاوت hashset و list

در این مقاله به بررسی hashset و مقایسه آن با لیست ها میپردازیم

۱۴۰۳/۰۴/۰۱ ۵۵
پیمان دهقان

شخصی سازی identity
شخصی سازی identity

در این مقاله قصد دارم یکم identity مایکروسافت رو شخصی سازی کنم

۱۴۰۳/۰۳/۲۵ ۷۷
پیمان دهقان

معرفی کتابخانه Bootstrap Flags
معرفی کتابخانه Bootstrap Flags

یه کتابخونه باحال برای ایکون پرچم ها

۱۴۰۳/۰۳/۱۵ ۸۰
پیمان دهقان

قالب API پاندا
قالب API پاندا

قالب آماده برای پروژه های API

۱۴۰۳/۰۳/۰۷ ۸۴
پیمان دهقان

آموزش ایجاد Template برای nuget
آموزش ایجاد Template برای nuget

۱۴۰۳/۰۳/۰۴ ۶۹
پیمان دهقان

یک جنریک از Ajax
یک جنریک از Ajax

۱۴۰۳/۰۲/۲۸ ۹۴
پیمان