PDA

View Full Version : حرفه ای: اختصاص نقش به کاربر به مدت محدود



bftarane
پنج شنبه 23 فروردین 1397, 16:07 عصر
سلام
فرض کنید می خواهیم به کاربران در ازای پرداخت وجه، نقشی با عنوان VIP با مدت زمان مشخص مثلا یک ساله بدیم،
که کاربر VIP در مدت این یک سال می تونه از یک سری امکانات سایت استفاده کنه.

تکنولوژی مورد استفاده Asp.net mvc5 هست و من می خوام از خود جداول Identity پیش فرض استفاده کنم
147926
چیزی که به نظر خودم می رسه اینه که یک فیلد تاریخ انقضا به جدول AspNetUserRoles اضافه کنم
بعد در اکشن مورد نظر چک کنم اگه کاربر نقشش VIP بود و تاریخ انقضا نگذشته بود اجازه داشته باشه اون فعالیت مورد نظر رو انجام بده.
برای چک کردن نقش که کد زیر رو بالای اکشن قرار می دیم

[Authorize(Roles = "VIP")]


- حالا سوال من اینه با فرض استفاده از asp.net 5 کدفرست چطور فیلد اختصاصی به جدول AspNetUserRoles میشه اضافه کرد؟

- و سوال دوم هم اینه که چطور به این فیلد تاریخ انقضا به ازای کاربر موردنظر دسترسی پیدا کنیم؟


ممنونم

ali_md110
پنج شنبه 23 فروردین 1397, 18:14 عصر
جدول AspNetUserRoles یک جدول چند به چند هست و در صورت اضافه کردن یک فیلد به این جدول از حالت چند به چند بیرون رفته و تبدیل به رابطه یک به چند میشود و اینکار صحیح نیست
برای این روش شما باید با جدول AspNetUsers کار کنید و فیلدهای تاریخ انقضا رو به این جدول اضافه کنید و کوئری شما بدینصورت باید باشه که:
کاربرانی با نقش VIP از این تاریخ به بعد lock کنید یا نقش vip کاربر را به یک نقش معمولی تبدیل کنید
برای اضافه کردن فیلد به AspNetUsers ابتدا یک کلاس بسازید مثلا AppUser


public class AppUser : IdentityUser<string,IdentityUserLogin,IdentityUserRole,Identity UserClaim>
{
//فیلد دلخواه اضافه کردیم public string FriendlyName { get; set; }
}



وذر تنظیمات DbSet ها در کلاس Context مان نیز عنوان جدول در دیتابیس را تغییر می دهیم


protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<AppUser>().ToTable("Users")

}
;