PDA

View Full Version : پروفایل متفاوت برای Role های متفاوت



vbkaar
سه شنبه 31 مرداد 1396, 19:35 عصر
سلام . من در برنامم دو تا role فروشنده و خریدار دارم که بعضی فیلدهای پروفایل برای هر دوی اونها مشترک هست و بعضی فرق میکنه. کاری که من انجام دادم در ApplicationUser به این شکل هست:

public class ApplicationUser : IdentityUser
{
public virtual Seller Seller { get; set; }
public virtual Customer Customer { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}


میخواستم ببینم آیا این راه درست هست؟ آیا راه بهتری برای پیاده سازی این موضوع وجود نداره؟
ممنون

Moien Tajik
چهارشنبه 01 شهریور 1396, 01:00 صبح
اگر فیلد مشترک بین هر 2 جدول دارید میتونید از ارث بری یا همون Inheritance استفاده کنید ، یعنی یک کلاس والد داشته باشید که فیلد های مشترک داخلش قرار میگیرن و 2 کلاس فرزند که از کلاس والد ارث بری میکنند .
با این روش کد تمیز تری خواهید داشت و از تکرار تو کدتون جلوگیری میشه و اصل DRY (https://dotnetcodr.com/2013/10/17/the-dont-repeat-yourself-dry-design-principle-in-net-part-1/) رو رعایت کردید .

اگر بنده منظورتون بد متوجه شدم بفرمایید که بیشتر راهنمایی کنم .

vbkaar
چهارشنبه 01 شهریور 1396, 06:42 صبح
اگر فیلد مشترک بین هر 2 جدول دارید میتونید از ارث بری یا همون Inheritance استفاده کنید ، یعنی یک کلاس والد داشته باشید که فیلد های مشترک داخلش قرار میگیرن و 2 کلاس فرزند که از کلاس والد ارث بری میکنند .
با این روش کد تمیز تری خواهید داشت و از تکرار تو کدتون جلوگیری میشه و اصل DRY (https://dotnetcodr.com/2013/10/17/the-dont-repeat-yourself-dry-design-principle-in-net-part-1/) رو رعایت کردید .

اگر بنده منظورتون بد متوجه شدم بفرمایید که بیشتر راهنمایی کنم .

متشکر از پاسختون
ببینید من میخواستم فیلدهای مشترک رو در همون کلاس ApplicationUser اضافه کنم که اینجوری هم از تکرار جلوگیری میشه. به این شکل:


public class ApplicationUser : IdentityUser
{
public virtual String Fname { get; set; }
public virtual String Lname { get; set; }
public virtual Seller Seller { get; set; }
public virtual Customer Customer { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}


الان مساله من پیاده سازی همین دو نوع پروفایل هست. این که آیا این روش به طور کلی روش درستی هست. الان در این روش من موقع ثبت نام کاربر با توجه به نوع کاربر که میتونه فروشنده یا خریدار باشه مقادیر رو تنظیم میکنم. مثلا اگه یک فروشنده بخواد ثبت نام کنه من فیلد های مشترک و فیلدهای کلاس Seller رو به کاربر نشون میدم و موقع ثبت اطلاعات ، فیلد از نوع Customer رو null قرار میدم. در ضمن یک فیلد از نوع ApplicationUser هم در هر دو کلاس Seller و Customer وجود داره. به طور کلی میخواستم بپرسم آیا این رویه ای که پیش گرفتم روش مناسبی هست برای دو نوع ثبت نام و پروفایل متفاوت؟ یا روش بهتری برای این کار وجود داره؟ ممنون

Moien Tajik
چهارشنبه 01 شهریور 1396, 09:40 صبح
بله درست هستش چون اینطور که گفتید بالاخره شما نیاز به ایجاد ارتباط بین جدولاتون دارید و روش ایجاد ارتباط هم همین هست .