PDA

View Full Version : سوال: نحوه دریافت Roleهای یک کاربر و فرستادن آن به View



OmMiD_MtWo
دوشنبه 23 فروردین 1395, 09:52 صبح
با سلام و عرض خسته نباشید خدمت اساتید گرامی
بنده در پروژه ای که بخش Account اون با استفاده از Identity پیاده سازی شده است، قصد دارم تا Roleهای مربوط به کاربر رو همراه اون به View بفرستم. در بخش Identity با توجه به اینکه هر کاربر میتونه چند نقش داشته باشه ولی در پروژه ی خودم و با توجه به نیاز خودم بنده برای هر کاربر یک Role درنظر گرفتم. حال قصد دارم در بخش Index که لیست کاربرها رو نشون میده، قصد دارم تا Role اون کاربر رو هم به View بفرستم ولی UserManager.GetRoles() همه یک list برمیگردونه ولی من فقط یک Role میخوام. چه جوری میتونم نقش اون کاربر رو برگردونم؟
باتشکر

hakim22
دوشنبه 23 فروردین 1395, 11:23 صبح
می توانید از LINQ و متد First استفاده کنید.

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

مثلا وقتی یک دسترسی تکی مثل "Admin" درست می کنید و اجازه ی دسترسی به مدیریت بدهید امکان کنترل بیشتر روی دسترسی ها را ندارید.
وقتی یک کاربر را مدیر می کنید به همه ی امکانات بخش مدیریت دسترسی خواهد داشت. روش یا همه یا هیچ کاربرد زیادی ندارد.

بهتر است برای دسترسی به هر قسمت یا هر گزینه ی سایت یک سمت جدا درست کنید.

مثلا EditUser ، DeleteUser ، CreatePost ، EditPost و ... و بعد متد مربوطه را با Authorize و کنترل سمت مربوطه محدود کنید.
یک بخش مجزا برای کنترل سمت کاربرها در مدیریت طراحی کنید تا ویرایش آن ساده شود.

همچنین در سایتهایی که دارای طرح هایی مثل برنزی ، نقره ای و طلایی هستند برای هر کدام یک سمت ساخته میشود.

OmMiD_MtWo
سه شنبه 24 فروردین 1395, 05:11 صبح
سپاس از پاسخ شما
متد GetRole یک لیست از Roleها را برمیگرداند، آیا با استفاده از foreach میتوانیم تمام roleهای مربوطه را برگردانیم؟
آیا امکان داینامیک کردن سطح دسترسی در سایت وجود دارد؟ اگر وجود دارد، به چه شکل میتوان یک فرم برای ادمین ترتیب داد تا به صورت داینامیک بتواند سطح دسترسی هر سمت را تعیین کند تا در برنامه بتوانیم آن سمت ها را که ادمین تعیین کرده، بخوانیم و در بالای هر اکشن مربوط به آن سمت، آن سمت را قرار دهیم؟
از صبر و لطف شما در پاسخ گویی، نهایت تشکر را دارم

hakim22
چهارشنبه 25 فروردین 1395, 06:31 صبح
همیشه باید به خروجی متدها نگاه کنید.

خروجی متد GetRoles یک IList<string> است .


public IEnumerable<string> GetRoles(string userId)
{
var model = _userManager.GetRoles(userId);
return model;
}


نباید برای سمتها سطح دسترسی تعیین کنید. سمتها خودشان یک سطح دسترسی هستند. می توانید برای هر سطح دسترسی یک سمت جدا داشته باشید.
بعد به هر کاربر برای دسترسی به قسمتهای مختلف سمت یا Role مورد نظر را اضافه کنید.

مثلا میخواهید برای حذف نظرات پستها یک سطح دسترسی داشته باشید . CommentDeleteRole اضافه کنید. و در اکشن مروبطه از Authorize(Roles="CommentDeleteRole") استفاده کنید.

فقط کاربرانی که به این سطح دسترسی دارند می توانند متد را اجرا کنند.

شما می توانید با استفاده از IsInRole در Identity تشخیص دهید آیا یک کاربر سطح دسترسی مشخصی دارد یا نه و بر این اساس قسمتهایی از صفحه که کاربر به آن دسترسی ندارد پنهان کنید.