مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

alibahman47

عضویت از 1395/11/13

مدیریت دینامیک سطوح دسترسی کاربران در Identity 2

  • شنبه 19 اسفند 1396
  • 23:14
تشکر میکنم

درود ,

آیا طوری که در  این مورد  گفته شده میشود بصورت دینامیک برای یک Role مشخص کرد که به چه کنتترولر و اکشن هایی دسترسی داشته باشد ؟

من چندبار مراحل گفته شده رو جلو رفتم ولی به نتیجه نرسید و به Error میخورم !

اگر نمونه بهتری رو سراغ دارید لطفا معرفی کنید .

پاسخ های این پرسش

تعداد پاسخ ها : 15 پاسخ
کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • شنبه 19 اسفند 1396
  • 23:26

چه خطایی، متن خطارو قرار بدید

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • یکشنبه 20 اسفند 1396
  • 08:31

براتون یک نمونه در این لینک قرار دادم

کاربر سایت

alibahman47

عضویت از 1395/11/13

  • یکشنبه 20 اسفند 1396
  • 09:55

مهندس علیزاده اروری که بود اینکه که با اعمال این تغییرات در بخش Role های سیتسم Identity کنترولر RolesAdmin در اکشن Create اخطار زیر رو میده و بعلاوه در صفحه نمایش لیست Roles ها دیگه لیستی رو نشون نمیده (حتی بصورت دستی تو دیتابیس وارد کردم ولی اینجا نشون نمیده):

آیا با این تغییراتی که اعمال شده دیگه کنترولر rolesAdmin کار نمیکنه ؟

- حالا  موندم چطوری باید یه Role  کنم ؟

ممنون مهندس مدائنی بابت اپلود Sample,

Sample رو اجرا کردم و ثبت نام کردم و بعد ثبت نام تنها صفحه ای که میتونم ببینم همون Register هست ! و برای بقیه صفحات HTTP Error 403.0 - Forbidden رو میده که خوب منطقی هست چون من Role موردنیاز رو ندارم .

ولی بصورت دستی در دیتابیس هم Role ایجاد کردم و اون Role رو به کاربری خودم دادم ولی بازهم نمیتونم هیچکدوم از صفحات رو ببینم ,

 - میشه لطفا بگید حالا چطوری باید یه Role رو تعریم کنم (چونکه کنترولر RoleAdmin دیگه کار نمیکنه) ؟

- و چطور Role رو به کنترولر یا اکشن ها اعمال کنم  ؟

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 20 اسفند 1396
  • 10:11

پارامتر ورودی RoleManager.CreateAsync از نوع ApplicationRole می باشد و احتمالا از IdentityRole ارث بری نکرده به همین دلیل خطا دریافت می کنید. کلاس Role شما باید به شکل زیر باشد:

public class Role : IdentityRole<Guid, UserRole>
    {
        public Role()
        {
            base.Id = OverGuid.Generate();
        }
    }

کاربر سایت

alibahman47

عضویت از 1395/11/13

  • یکشنبه 20 اسفند 1396
  • 10:30

دقیقا همینی هست که گفتید .

در بخشی از Sample بالا که گفتم ApplicationRole رو بصورت زیر تغییر میده :

کاربر سایت

alibahman47

عضویت از 1395/11/13

  • یکشنبه 20 اسفند 1396
  • 10:37

این کلاس که نوشتید رو در کدوم بخش اضافه کنم ؟

توی خود کنترولر اضافش کردم بازهم ارور زیر رو میده :

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 20 اسفند 1396
  • 10:39

OverGuid رو پاک کنید. کلاس UserRole هم به شکل زیر است:

    public class UserRole : IdentityUserRole<Guid>
    {

    }

کاربر سایت

alibahman47

عضویت از 1395/11/13

  • یکشنبه 20 اسفند 1396
  • 10:42

مهندس مدائنی  در موردی که شما آپلود کردید هم بخشی برای ایجاد نقش ها وجود نداره , درسته ؟

کاربر سایت

alibahman47

عضویت از 1395/11/13

  • یکشنبه 20 اسفند 1396
  • 11:13

مهندس علیزاده این دو مورد رو هم اضافه کردم و مدل ورودی رو هم به CreateRoleViewModel تغییر دادم ولی بازهم اخطار پابرجاست :

مهندس وقت دارید لینک  رو که مهندس مدائنی هم زحمت کشیدن اپلود کردن یه نگاه بندازید .

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 20 اسفند 1396
  • 11:25

کد کلاس ApplicationRole را قرار بدید.

کاربر سایت

alibahman47

عضویت از 1395/11/13

  • یکشنبه 20 اسفند 1396
  • 11:37

مهندس با توجه به تغییراتی که صورت گرفته کد های کنترولر 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; }
    }

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 20 اسفند 1396
  • 12:02

به جای این که از  IdenityRole نمونه بسازید از ApplicationRole نمونه بسازید.

کاربر سایت

alibahman47

عضویت از 1395/11/13

  • یکشنبه 20 اسفند 1396
  • 12:53

خوب این کار رو هم کردم .

حالا مثلا برای همین اکشن Create من مدل رو CreateRoleViewModel گذاشتم و در سمت HttpPost هم اون رو دریافت دریافت کردم :

ولی همون طور که از کد کلاس ApplicationRole مشخصه این کلاس یک لیست از RoleAccess رو در ورودی میگیره .

برای این قسمت به چه شکلی باید عمل کرد ؟

کاربر سایت

سهیل علیزاده

عضویت از 1396/04/09

  • یکشنبه 20 اسفند 1396
  • 17:44

تغییرات زیر را اعمال کنید :

   public class ApplicationRole : IdentityRole
    {
        public ApplicationRole(string name) : base(name)
        {
            
        }
        public virtual ICollection<RoleAccess> RoleAccesses { get; set; }
    }

کاربر سایت

alibahman47

عضویت از 1395/11/13

  • یکشنبه 20 اسفند 1396
  • 21:43

ممنون , این رو هم انجام دادم , اخطار اکشن Create رفع شد ولی خوب حالا باعث شد کلاس ApplicationRoleManager اخطار بده :

کالا بعید میدونم این اکشن Create با توجه به تغییرات اعمال شده تو طراحی role ها دیگه کار کنه .حتی اکشن Index نمایش ساده لیست role ها هم کار نمیکنه .

یه ایمیل به شخصی که Sample رو نوشن فرستادم شاید خودشون این قسمت رو بازبینی کنن.

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)