ایجاد جداول مختلف برای کاربران در Asp.net core
ما در پروژه خودمون که با Asp.net core هست چند نوع کاربر داریم. کاربران ما شامل :
- استاد
- دانشجو
- اپراتور
- کارمندان
حالا یک سوال برای من پیش اومده در اینجا. هر کاربر در سیستم ما به یکسری Page ها دسترسی داره و صفحات مخصوص به خودش رو داره. اما من می خوام برای هر کاربر یک جدول جداگانه در نظر بگیرم و از امکانات Identity هم برای اون استفاده کنم. یعنی 4 تا جدول User میخوام و میخوام دستورات Identity برای هر 4 نوع از کاربر هم استفاده شود.
لطفا راهنمایی کنید که چجوری باید این کار رو انجام بدم. چون وقتی که جداول Identity رو ایجاد می کنیم فقط یک جدول به نام AspNetUsers رو ایجاد میکنه.
و لطفا بفرمایید که این کاری که من میکنم منطقی هست یا نه
ممنون
پاسخ هوش مصنوعی
برای ایجاد جداول مختلف برای انواع کاربران در ASP.NET Core با استفاده از Identity، شما می توانید از روش های مختلفی استفاده کنید. یکی از روش های منطقی، ایجاد یک کلاس پایه برای کاربر و سپس ایجاد کلاس های مشتق برای هر نوع کاربر است. این روش به شما این امکان را می دهد که از قابلیت های Identity برای همه کاربران استفاده کنید و در عین حال جداول جداگانه ای نیز داشته باشید.
در ادامه یک مثال ساده از نحوه پیاده سازی این ساختار را مشاهده می کنید:
using Microsoft.AspNetCore.Identity;
public class ApplicationUser : IdentityUser
{
// ویژگی های مشترک بین همه کاربران
}
public class Professor : ApplicationUser
{
// ویژگی های خاص استاد
}
public class Student : ApplicationUser
{
// ویژگی های خاص دانشجو
}
public class Operator : ApplicationUser
{
// ویژگی های خاص اپراتور
}
public class Employee : ApplicationUser
{
// ویژگی های خاص کارمندان
}
برای ایجاد جداول جداگانه برای هر کاربر، شما باید از مایگریشن ها استفاده کنید. هر کلاسی که ایجاد می کنید به کمک Fluent API در متد OnModelCreating
در کلاس DbContext
خود می توانید مپ شود.
public class ApplicationDbContext : IdentityDbContext
{
public DbSet Professors { get; set; }
public DbSet Students { get; set; }
public DbSet Operators { get; set; }
public DbSet Employees { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
// ایجاد جداول جداگانه برای هر نوع کاربر
builder.Entity().ToTable("Professors");
builder.Entity().ToTable("Students");
builder.Entity().ToTable("Operators");
builder.Entity().ToTable("Employees");
}
}
این روش به شما اجازه می دهد تا از قابلیت های Identity برای تمام نوع کاربران استفاده کنید و در عین حال ساختار جداولتان را جداگانه مدیریت نمایید. همچنین می توانید به سادگی ویژگی های خاص هر کاربر را در کلاس های مربوطه پیاده سازی کنید.
این روش یک ساختار منطقی و کافی برای پروژه هایی است که نیاز به مدیریت انواع مختلف کاربران دارند.
جداول Identity برای ذخیره مشخصات فردی و رمز عبور و غیره می باشد و این موجودیت (استاد، کارمند، دانشجو و غیره) که شما در اینجا مطرح کردید نقش هستند و باید در جدول Role تعریف کنید در جداول AspnetUser مشخصات فردی هر موجود زنده انسانی یا به اصطلاح هر شغل و حرفه ای را می توانید ذخیره کنید، البته در صورتی که اطلاعات دیگری برای این افراد دارید می توانید جداول جداگانه برای آنها بسازید و یک کلید خارجی در آنها تعریف کنید برای مثال Id و در واقع این کلید به جدول کاربران متصل خواهد بود و مشخص میکند که اطلاعاتی که شما در جدول وارد میکنید مربوط به کدام کاربر است حالا نقش آن مهم نیست ، در مجموع برای اینکار شما باید طریقه استفاده و ارتباط جداول AspnetUser و AspnetRole و AspnetUserRole را باهم بدانید و همینطور برای کار با این جداول بهتر است از خصوصیت های async await در اکشن های کنترل خودتان استفاده کنید... برای احراز هویت هم از خصوصیت احراز هویت Authorize برای هر کنترل یا اکشن استفاده می شود که هر کاربر به صفحه ی مربوط به خودش دسترسی داشته باشد آن هم از طریق همین جداول Role ها که در بالا اشاره شد..
به طور کلی شما نیاز به چند جدول ندارید و بهترین پیاده سازی اینه که از Role ها برای تمایز قرار دادن بین هویت های مختلف در پروژه استفاده کنید. اگر مشخصاتی برای هویتهای مختلف باید در دیتابیس ذخیره بشه میتونید از Claims ها یا یک جدول Key/Value استفاده کنید یا خیلی ساده همه ی ستونهای همه ی هویتهارو درون جدول Users تعریف کنید و مشخصاتی که یک هویت خاص نداره Null باقی میمونه. اشکالی نداره که ستونهای یک جدول موارد زیادی نال داشته باشه.
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2