بسیار خوش حالیم که با یکی دیگر از مقالات آموزشی طراحی سایت با ASP.NET MVC در خدمت شما عزیزان هستیم در این مقاله آموزشی قصد داریم شما را با نحوه محدود کردن سطح دسترسی کاربران در پروژه های ASP.NET MVC آشنا نماییم .
محدود کردن سطح دسترسی کاربران سایت با توجه به نقش آنان در ASP.NET MVC
فرض کنید که میخواهید یک سیستم مدیریت محتوا با ASP.NET MVC پیاده سازی کنید در این پروژه قطعا شما نیاز دارید تا سطوح دسترسی متفاوتی را برای کاربران سایت مشخص کنید مثلا کاربرانی که دارای نقش نویسنده هستند نباید به صفحات مدیریتی دسترسی داشته باشند ، خب به نظر شما چگونه می توان سطح دسترسی کاربران به بعضی از Action Method ها را در MVC محدود کرد ؟
چگونه می توان کاربرانی را که آدرس صفحات مدیریتی را در مرورگر خود وارد می نمایند را به صفحه ای که خودمان تعیین کرده ایم هدایت کنیم و از ورود کاربرانی که دارای نقش ادمین یا مدیر سایت نیستند به صفحات مدیریتی جلوگیری کرد؟
ما در این مقاله آموزشی به شما آموزش خواهیم داد که چگونه سطوح دسترسی کاربران سایت را در پروژه های ASP.NET MVC محدود نمایید پس تا پایان این مقاله آموزشی با ما همراه باشید .
ایجاد کلاس AccessDeniedAuthorizeAttribute
در پروژه ی خود یک Class به نام AccessDeniedAuthorizeAttribute یا هر نام دلخواهی که میخواهید ایجاد کرده و سپس کدهایی زیر را درون این کلاس بنویسید کلاس AccessDeniedAuthorizeAttribute از کلاس AuthorizeAttribute ارث بری میکند.
در داخل (” “)RedirectResult به جای آدرس Home/Default/~ می توانید آدرس صفحه دلخواهی که میخواهید کاربر را به آن هدایت کنید را وارد نمایید.
توجه : در پروژه خود یک Controller به نام Home و یک ActionMethod به نام Default و یک View برای اکشن متد Default برای هدایت کاربر به صفحه Home/Default/~ ایجاد نمایید.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace HepatitisStudy.Class { public class AccessDeniedAuthorizeAttribute : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { base.OnAuthorization(filterContext); if (filterContext.Result is HttpUnauthorizedResult) { filterContext.Result = new RedirectResult("~/Home/Default"); } } } }
افزودن اتریبیت [AccessDeniedAuthorize(Roles = ” “)] به ActionMethod
حال اتریبیوت [AccessDeniedAuthorize(Roles = ” “)] را به بالای اکشن متدی که می خواهید از دسترسی کاربرانی با نقش یا Role خاص خارج نمایید اضافه کنید ، مقدار Roles را برابر نقش کاربرانی که میخواهید محدود کنید قرار دهید مثلا من میخواهیم کاربرانی که دارای نقش User هستند به صفحه Admin/Index/~ که یک صفحه مدیریتی است دسترسی نداشته باشند بنابراین از این اتریبیوت به شکل زیر استفاده می کنم.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace AccessDeniedUser.Controllers { public class AdminController : Controller { [AccessDeniedAuthorize(Roles = "User")] public ActionResult Index() { return View(); } } }
حال اگر کاربری با نقش User بخواهد به صفحه Admin/Index/~ وارد شود اجازه مشاهده این صفحه به او داده نمی شود و کاربر فوق به صفحه پیش فرض Home/Default/~ هدایت می شود.
خب به پایان این مقاله آموزشی رسیدیم امیدوارم این مقاله آموزشی برای شما دوستان مفید واقع شود در صورتی که پیرامون این مقاله و سایر مقالات آمورشی ASP.NET MVC سوالی داشتید حتما در قسمت نظرات مطرح کنید.
4 پاسخ
سلام .
شما که اون بحث role رو مطرح می کنین لطفا اگه میشه provider ها وساختارو متدهای usermanagerوsigninmanagerوrolemanagerرو هم به طور مفصل مقاله بگزارین تو سایت وهمچنین اگه میشه از tokenو jwtیه مگاله بگزارین.
با تشکر
سلام وقت شما بخیر ، تا یکی دوماه آینده مقالات جامع و بسیار کاربردی در سایت انتشار خواهیم داد ، ممنون بابت پیشنهادتون.
سلام
چه جوری باید به یه کاربر که اطلاعاتش در دیتابیس هست زمانی که لاگین میشه Role اش رو بهش بدم؟
مقدار رول هم در دیتابیس هست!
سلام … اگر منظورتون این است که وقتی لاگین شد چطوری Role اش رو بگیرید و اگر از identity خود ماکروسافت برای لاگین استفاده میکنید می تونید userId کاربری که لاگین شده رو بگیرید و سپس از طریق linq و با استفاده از userId کاربر ، نقش کاربر را از دیتابیس بگیرید .