دسته بندی ها
01:55 1398/08/19

ایجاد جداول مختلف برای کاربران در Asp.net core

مشخصات سوال کننده :
کاربر : hamdola     امتیاز کاربر : 121     رتبه کاربر : 12
دسته بندی : Asp.net Core Asp.net Mvc

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

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

برای ایجاد جداول مختلف برای انواع کاربران در 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 برای تمام نوع کاربران استفاده کنید و در عین حال ساختار جداولتان را جداگانه مدیریت نمایید. همچنین می توانید به سادگی ویژگی های خاص هر کاربر را در کلاس های مربوطه پیاده سازی کنید.

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

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : mghb 12:50 1398/08/19

جداول Identity برای ذخیره مشخصات فردی و رمز عبور و غیره می باشد و این موجودیت (استاد، کارمند، دانشجو و غیره) که شما در اینجا مطرح کردید نقش هستند و باید در جدول Role تعریف کنید در جداول AspnetUser مشخصات فردی هر موجود زنده انسانی یا به اصطلاح هر شغل و حرفه ای را می توانید ذخیره کنید، البته در صورتی که اطلاعات دیگری برای این افراد دارید می توانید جداول جداگانه برای آنها بسازید و یک کلید خارجی در آنها تعریف کنید برای مثال Id و در واقع این کلید به جدول کاربران متصل خواهد بود و مشخص میکند که اطلاعاتی که شما در جدول وارد میکنید مربوط به کدام کاربر است حالا نقش آن مهم نیست ، در مجموع برای اینکار شما باید طریقه استفاده و ارتباط جداول AspnetUser و AspnetRole و AspnetUserRole را باهم بدانید و همینطور برای کار با این جداول بهتر است از خصوصیت های async await در اکشن های کنترل خودتان استفاده کنید... برای احراز هویت هم از خصوصیت احراز هویت Authorize برای هر کنترل یا اکشن استفاده می شود که هر کاربر به صفحه ی مربوط به خودش دسترسی داشته باشد آن هم از طریق همین جداول Role ها که در بالا اشاره شد..

ویرایش شده در یکشنبه 19 آبان 1398 ساعت 13:05:10
به این پاسخ امتیاز بدهید    1
امتیاز: 27 رتبه: 26
پاسخ دهنده : mobile_app 02:20 1398/08/20

به طور کلی شما نیاز به چند جدول ندارید و بهترین پیاده سازی اینه که از Role ها برای تمایز قرار دادن بین هویت های مختلف در پروژه استفاده کنید. اگر مشخصاتی برای هویتهای مختلف باید در دیتابیس ذخیره بشه میتونید از Claims ها یا یک جدول Key/Value استفاده کنید یا خیلی ساده همه ی ستونهای همه ی هویتهارو درون جدول Users تعریف کنید و مشخصاتی که یک هویت خاص نداره Null باقی میمونه. اشکالی نداره که ستونهای یک جدول موارد زیادی نال داشته باشه.

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