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

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

کاربر سایت

zcio

عضویت از 1397/09/10

مشکل در تخصیص رول به کاربر

  • شنبه 10 آذر 1397
  • 22:13
تشکر میکنم

سلام و عرض ادب

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

برای نمایش کاربران عضو یک گروه کاربری خاص از کد زیر استفاده کردم

        myDbContext.Users.Add(myApplicationUser);
        var store = new UserStore<ApplicationUser>(myDbContext);
        var manager = new ApplicationUserManager(store);
        manager.AddToRole(applicationUser.Id, "User");

و برای لیست کردن انها از کد زیر

            ApplicationDbContext myDbContext = new ApplicationDbContext();
        var getRoleId = myDbContext.Roles.Where(r => r.Name == "User").Select(m => m.Id).SingleOrDefault();
        var fetch = myDbContext.Users.Where(a => a.Roles.Any(r => r.RoleId == getRoleId)).ToList();
        var us = myDbContext.Users.ToList();
        return View(fetch);

اما خروجی کد فوق همیشه 0 تعداد بود !

همین طور بررسی کردم دیدم در تیبل IdentityUser_Id در جدول IdentityUserRole همیشه نال قرار میگیره !

برای تست یکی از ای دی کاربر ها را در این تیبل قرار دادم متوجه شدم کد بازخوانی برای لیست کردن سالم هست ، پس نتیجه گرفتم در تخصیص مشکل دارم کل اینترنت را زیر و رو کردم و چیزی پیدا نکردم حاصل کارمم شد 2 تا تاپیک بدون جواب در StackOverFlow ! که لینک هاشون https://stackoverflow.com/questions/53541824/asp-mvc-identity-2-get-user-in-user-role و https://stackoverflow.com/questions/53573140/asp-mvc-identity-2-relation-between-aspnetuserroles-and-identityusers-model این شد ! تقریبا همه کاراهایی که دیدم را تست کردم اما نتیجه نگرفتم

ممنون میشم یکی از دوستان راهنمایی کنند.

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

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

سهیل علیزاده

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

  • یکشنبه 11 آذر 1397
  • 08:10

متد AddToRole یک IdentityResult بازگردانی میکنه که از طریق اون باید چک کنید که آیا موفقیت آمیز بوده یا خیر اگر نه به چه دلیل.

   var result = manager.AddToRole(applicationUser.Id, "User");

و علت اضافه نشدن نقش هم اینه که شما هنوز کاربر رو ثبت نکردید یعنی بعد از آن SaveChange انجام نداده اید.

و نکته دیگه این هستش که برای اضافه کردن کاربر در Identity باید از متد CreateAsync که در Manager شما قرار دارد استفاده کنید.

کاربر سایت

zcio

عضویت از 1397/09/10

  • دوشنبه 19 آذر 1397
  • 18:58

سلام دوست عزیز

اول معذرت میخوام بابت تاخیر طولانی در پاسخ به شما ، متاسفانه پروژه دیگری پیش امد این پروژه کمی متوقف شد.

دوم اینکه طبق راهنمایی که لطف کردید پیش رفتم اما جوابی نگرفتم ، نتیجه Add Role را بررسی کردم True بود. مورد Create را تبدیل به CreateAsync کردم اما تفاوتی ایجاد نشد. بعد از CreateAsync هم SaveChange انجام دادم تغییری ایجاد نشد.

توضیحات کلی تر بگم در هر حالت قدیمی که بنده انجام دادم و جدیدی که شما دستور فرمودید نتیجه یکی هستش یعنی کاربر در دیتا بیس ذخیره میشه و همچنین جدول AspNetUserRoles هم در SQL Server بررسی کردم پر هستش اما یکی از کالمن ها که ارتباط این جدول و جدول IdentityUser را برقرار میکنه همچنان خالی هستش ، همان طور که عرض کردم به صورت دستی اگر در SQL Server مقدار ای دی کاربر را در یکی از همین Row ها مربوط به کاربر بریزم به درستی واکشی انجام میشه !

هر موردی نیاز هست بدونید بفرمایید تا بتونیم مشکلم را حل کنیم.

پیشاپیش از وقتی که میگذارید تشکر میکنم.

کاربر سایت

سهیل علیزاده

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

  • سه شنبه 20 آذر 1397
  • 09:25

اگر بتونید یک نمونه از کد هاتون رو درون یک پروژه قرار بدید که قابل اجرا باشد  و آن را روی گیت هاب بگذارید بنده کد شمارو دیباگ کنم و مشکلتون رو بگم عالی میشود. فاکتور های زیادی وجود دارد که باید بررسی بشه تا مشکل رو پیدا کنیم.

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

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

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

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