PDA

View Full Version : Auhorize کردن action های کنترلر



sh_esharif
پنج شنبه 21 آبان 1394, 08:32 صبح
دوستان عزیز سلام
برنامه ی mvc هست که دسترسی های آن به صورت زیر تعریف میشه:
گروه های کاربری تعریف میشه که مشخص میکنه چه فرمها و بخشهایی از هر فرم برای آن گروه قابل رویت یا فعال باشد.
هر کاربر میتواند عضو یک یا چند گروه کاربری باشد.
در این صورت با ورود یک کاربر به برنامه بر اساس گروه کاربری های مربوطه فرمها و اجزای آنها display:none یا "disabled="disabled می شوند.

با این شیوه هر کسی میتواند مثلا با Inspect Element کروم صفحه رو دستکاری بکنه .
فکر می کنم باید برای هر متد اکشن Authorize گذاشته بشه. با این شیوه ای که توضیح دادم متد مربوط به این attribute چطور نوشته میشه؟
لازم به ذکر است که این برنامه تمام jquery و ajax است و در address bar خبری از کنترلر و متد مربوطه نیست. اینکه از کجا میشه فهمید کاربر در چه فرمی بوده و روی چه عنصری کلیک کرده هم جای سوال هست.
ممنون از وقتی که میگذارید.

mir555
پنج شنبه 21 آبان 1394, 20:11 عصر
فقط کافیه بالای هر اکشنت اینو بنویسی [authorize] و اگه می خوای که یک کاربر خاص و یا یک roll خاص بتونه بهش دسترسی داشته باشه کافیه دستور زیر بنویسی

[authorize(roles = admin )]

sh_esharif
پنج شنبه 21 آبان 1394, 20:21 عصر
بله باید حتما اتریبوت [authorize] رو بذارم و فیلتر مربوط به اون رو بنویسم. چه جوری بنویسم رو نمی دونم؟ اینکه چه ویو و چه المنتی از اون ویو باعث اجرای این اکشن شده؟

mir555
پنج شنبه 21 آبان 1394, 20:39 عصر
میشه یه مثال بزنید و بگید روی کدوم قسمت می خواید دسترسی تعریف کنید؟

hakim22
پنج شنبه 21 آبان 1394, 22:41 عصر
شما باید از PartialView استفاده کنید. هر قسمت از سایت که نیاز به داشتن یک سمت خاص داره میتوانید در ویو و با یک if کنترل کنید.
اگر کاربر سمت مورد نظر رو داشت باید از Html.Action برای رندر کرد پارشیال ویو استفاده کنید. در این روش وقتی کاربری دسترسی به یک قسمت نداره کدهای مورد نظر اصلا در ویو ساخته نمیشوند
که بشه با display نمایش داد یا خیر.

اگر میخواهید از if نوشتن درون ویو صرف نظر کنید و دید حرفه ای تری به پروژه داشته باشید باید یک کلاس جدید برای Authorize بنویسید. اینطوری فقط با استفاده از این اتریبیوت میتوانید در کنترل دسترسی ها ار چک کنید و درصورتی که دسترسی به یک بخش نبود مقدار null از اکشن برگردونید (یا EmptyString)

برای باز سازی یک AuthorizeAtrribute باید از این کلاس ارث بری کنید و یک کلاس جدید بسازید . چند متد هست که باید Override کنید. البته راه آسونی نیست ولی راه درسته.

sh_esharif
چهارشنبه 27 آبان 1394, 11:50 صبح
ممنون از پاسختون.
جناب hakim22 عزیز این فرمها همگی PartialView هستند و اگه شخص دسترسی به آنها نداشته باشد به فرم دیگه ای هدایت میشه. مشکل سر اجزای داخلی این PartialView ها هست . مثلا شخص می تونه محتوای فرم رو ببینه ولی نمی تونه چیزی درج کنه یعنی دکمه درج غیرفعال یا invisible هست. این اجزای داخلی چه جوری باید مدیریت شوند؟
ممنون.