سؤال

أنا أستخدم ASP.NET الهوية مع موقع ويب جديد ولا يبدو أن هناك الكثير(أي?) أمثلة على كيفية القيام بذلك بطريقة منفصلة.أنا لا أريد نموذج المجال الخاص بي DomainUser الطبقة يجب أن ترث من Microsoft.AspNet.Identity.EntityFramework.User, ، لذلك قمت بإنشاء فئة التي تبدو مثل هذا:

public class IdentityUser : User
{
    public virtual DomainUser DomainUser { get; private set; }
}

لقد انتقلت DbSetالصورة المطلوبة من قبل ASP.NET الهوية في نفس المشتقة DbContext فئة كنماذج المجال الخاص بي كما هو موضح في هذه الإجابة.لقد ربطت IdentityUser أحادي الاتجاه إلى DomainUser عبر واجهة برمجة التطبيقات بطلاقة مثل ذلك:

modelBuilder.Entity<IdentityUser>().HasRequired(iu => iu.DomainUser).WithRequiredPrincipal();

هذا يسمح لي في الغالب بفصل مخاوف التفويض والمصادقة عن السلوكيات المحددة في DomainUser صف دراسي.هذا أفضل من دمجها في فئة واحدة ، لكنها لا تزال تبدو قبيحة.لا يزال لدي إشارات إلى المطلوب ASP.NET جمعيات الهوية في مشروع المجال الخاص بي.يمكنني إنشاء مشروع آخر يحتوي فقط على فئة إيدنتيتيوسر وإشارة إلى تجميع المجال الخاص بي للسماح بخاصية التنقل ، ولكن هذا يبدأ في الشعور بالالتواء.

أشعر أنه يجب أن تكون هناك طريقة أفضل وأنظف وأكثر معيارية لربط الهوية بالمجال دون أن يؤدي ذلك إلى اقتران ضيق.

هل توصل أي شخص إلى طريقة أفضل للتعامل مع هذا?أنا على أمل لكسب انتباه المتورطين في ASP.NET مشروع الهوية (هاو كونغ وآخرون) لتوفير التوجيه هنا.

هل كانت مفيدة؟

المحلول 2

والحقيقة هي أنه إذا كنت تريد الذهاب إلى وراثة من إيدنتيتيوسر, ASP.NET الجمعيات ذات الصلة الهوية تأتي على طول للركوب.لا يمكنك فصل الهوية عن ASP.NET.الأمثلة الأصلية في السؤال لا تشتري لك الكثير-في معظم الحالات ربما كنت أفضل حالا مجرد وراثة من IdentityUser إذا كنت ستستخدم IdentityUser في مشروع المجال الخاص بك.

إذا كان مشروع المجال الخاص بك يحتاج حقا إلى أن يكون خاليا من ASP.NET التجميعات ذات الصلة ثم يمكنك ترك الفئات ذات الصلة بالهوية في مشروع الويب الخاص بك وإنشاء منفصلة User نموذج في مشروع المجال الخاص بك ارتباط اثنين برمجيا ، على النحو المقترح هنا.

نصائح أخرى

هناك مناقشة حول الفصل ASP.NET الهوية هنا.ويمكنك العثور على أمثلة على كيفية تنفيذها في مشروع مفتوح المصدر سيمبلسيكوريتي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top