درود ,
آیا طوری که در این مورد گفته شده میشود بصورت دینامیک برای یک Role مشخص کرد که به چه کنتترولر و اکشن هایی دسترسی داشته باشد ؟
من چندبار مراحل گفته شده رو جلو رفتم ولی به نتیجه نرسید و به Error میخورم !
اگر نمونه بهتری رو سراغ دارید لطفا معرفی کنید .
چه خطایی، متن خطارو قرار بدید
براتون یک نمونه در این لینک قرار دادم
مهندس علیزاده اروری که بود اینکه که با اعمال این تغییرات در بخش Role های سیتسم Identity کنترولر RolesAdmin در اکشن Create اخطار زیر رو میده و بعلاوه در صفحه نمایش لیست Roles ها دیگه لیستی رو نشون نمیده (حتی بصورت دستی تو دیتابیس وارد کردم ولی اینجا نشون نمیده):
آیا با این تغییراتی که اعمال شده دیگه کنترولر rolesAdmin کار نمیکنه ؟
- حالا موندم چطوری باید یه Role کنم ؟
ممنون مهندس مدائنی بابت اپلود Sample,
Sample رو اجرا کردم و ثبت نام کردم و بعد ثبت نام تنها صفحه ای که میتونم ببینم همون Register هست ! و برای بقیه صفحات HTTP Error 403.0 - Forbidden رو میده که خوب منطقی هست چون من Role موردنیاز رو ندارم .
ولی بصورت دستی در دیتابیس هم Role ایجاد کردم و اون Role رو به کاربری خودم دادم ولی بازهم نمیتونم هیچکدوم از صفحات رو ببینم ,
- میشه لطفا بگید حالا چطوری باید یه Role رو تعریم کنم (چونکه کنترولر RoleAdmin دیگه کار نمیکنه) ؟
- و چطور Role رو به کنترولر یا اکشن ها اعمال کنم ؟
پارامتر ورودی RoleManager.CreateAsync از نوع ApplicationRole می باشد و احتمالا از IdentityRole ارث بری نکرده به همین دلیل خطا دریافت می کنید. کلاس Role شما باید به شکل زیر باشد:
public class Role : IdentityRole<Guid, UserRole> { public Role() { base.Id = OverGuid.Generate(); } }
دقیقا همینی هست که گفتید .
در بخشی از Sample بالا که گفتم ApplicationRole رو بصورت زیر تغییر میده :
این کلاس که نوشتید رو در کدوم بخش اضافه کنم ؟
توی خود کنترولر اضافش کردم بازهم ارور زیر رو میده :
OverGuid رو پاک کنید. کلاس UserRole هم به شکل زیر است:
public class UserRole : IdentityUserRole<Guid> { }
مهندس مدائنی در موردی که شما آپلود کردید هم بخشی برای ایجاد نقش ها وجود نداره , درسته ؟
کد کلاس ApplicationRole را قرار بدید.
مهندس با توجه به تغییراتی که صورت گرفته کد های کنترولر RolesAdmin دیگه هیچکدومشون هیچ کاری نمیکنن :
مثلا اکشن زیر دیگه لیست Role ها رو نشون نمیده :
کد کلاس :
public class ApplicationRole : IdentityRole { public virtual ICollection<RoleAccess> RoleAccesses { get; set; } } و کلاس RoleAccesses همه بصورت زیره :
public class RoleAccess { public int Id { get; set; } public string Controller { get; set; } public string Action { get; set; } public string RoleId { get; set; } public virtual ApplicationRole Role { get; set; } }
به جای این که از IdenityRole نمونه بسازید از ApplicationRole نمونه بسازید.
خوب این کار رو هم کردم .
حالا مثلا برای همین اکشن Create من مدل رو CreateRoleViewModel گذاشتم و در سمت HttpPost هم اون رو دریافت دریافت کردم :
ولی همون طور که از کد کلاس ApplicationRole مشخصه این کلاس یک لیست از RoleAccess رو در ورودی میگیره .
برای این قسمت به چه شکلی باید عمل کرد ؟
تغییرات زیر را اعمال کنید :
public class ApplicationRole : IdentityRole { public ApplicationRole(string name) : base(name) { } public virtual ICollection<RoleAccess> RoleAccesses { get; set; } }
ممنون , این رو هم انجام دادم , اخطار اکشن Create رفع شد ولی خوب حالا باعث شد کلاس ApplicationRoleManager اخطار بده :
کالا بعید میدونم این اکشن Create با توجه به تغییرات اعمال شده تو طراحی role ها دیگه کار کنه .حتی اکشن Index نمایش ساده لیست role ها هم کار نمیکنه .
یه ایمیل به شخصی که Sample رو نوشن فرستادم شاید خودشون این قسمت رو بازبینی کنن.
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)