محدود کردن سطح دسترسی کاربران بر اساس نقش در ASP.NET MVC

محدود کردن سطح دسترسي کاربران در MVC
محدود کردن سطح دسترسي کاربران در MVC

بسیار خوش حالیم که با یکی دیگر از مقالات آموزشی طراحی سایت با 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 سوالی داشتید حتما در قسمت نظرات مطرح کنید.

فیلم آموزشی asp.net core 2

آرزو ابراهیمی
بیش از 6 سال است که زمینه طراحی و توسعه سایت فعالیت می‌کنم، طراح و برنامه نویس انواع سامانه‌های تخصصی پزشکی، مناقصات، فروشگاهی و … بودم و هستم و هدفم در سایت میزفا ارائه اطلاعات بروز و ناب در زمینه طراحی سایت است. تا از این طریق بتونم تجربیات و دانسته های خودم را با تمامی علاقمندان به مباحث طراحی سایت به اشتراک بزارم .

فیلم آموزشی asp.net core 2

4 نظر

4 پاسخ

  1. سلام .
    شما که اون بحث role رو مطرح می کنین لطفا اگه میشه provider ها وساختارو متدهای usermanagerوsigninmanagerوrolemanagerرو هم به طور مفصل مقاله بگزارین تو سایت وهمچنین اگه میشه از tokenو jwtیه مگاله بگزارین.
    با تشکر

    1. سلام وقت شما بخیر ، تا یکی دوماه آینده مقالات جامع و بسیار کاربردی در سایت انتشار خواهیم داد ، ممنون بابت پیشنهادتون.

  2. سلام
    چه جوری باید به یه کاربر که اطلاعاتش در دیتابیس هست زمانی که لاگین میشه Role اش رو بهش بدم؟
    مقدار رول هم در دیتابیس هست!

    1. سلام … اگر منظورتون این است که وقتی لاگین شد چطوری Role اش رو بگیرید و اگر از identity خود ماکروسافت برای لاگین استفاده میکنید می تونید userId کاربری که لاگین شده رو بگیرید و سپس از طریق linq و با استفاده از userId کاربر ، نقش کاربر را از دیتابیس بگیرید .

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

حداکثر حجم فایل برای آپلود: 1 مگابایت. فایل‌های مجاز برای آپلود: عکس, ویس, ویدیو, ورد یا پی دی اف, فایل متنی, زیپ. شما می‌تونید برای بهتر پرسیدن سوالتون، عکس یا ویس یا حتی فیلم در بخش نظرات میزفا آپلود کنید. برای ضبط ویس می‌تونید از خود واتس آپ استفاده کنید و بعد اینجا آپلود کنید و برای ارسال عکس هم کافی هست اسکرین شات بگیرید. Drop file here

با موفقیت ثبت شد، میزفا از شما برای عضویت در خبرنامه هفتگی تشکر میکند.

عضویت در خبرنامه هفتگی برای دریافت:

  • فیلم و مقاله رایگان سئو
  • آموزش‌های UX ، GA و GTM
  • مقاله های تخصصی ASP.NET Core
  • اطلاع رسانی از محصولات
فیلم آموزشی asp.net core 2
ترک میزفا خوب نیست!
معرفی جامع‌ترین ابزار سئو در ایران
بالای ۱۰ هزار عضو
PHZpZGVvIHdpZHRoPSI2MDAiIGhlaWdodD0iMzUwIiBwb3N0ZXI9Imh0dHBzOi8vbWl6ZmEuY29tL2Jsb2cvd3AtY29udGVudC91cGxvYWRzLzIwMjMvMDUvcG9zdGVyLW1pemZhLXRvb2xzLXZpZGVvLW1pbi5wbmciIGNvbnRyb2xzIHByZWxvYWQ9Im5vbmUiPiANCiAgIDxzb3VyY2Ugc3JjPSJodHRwczovL21pemZhLmNvbS9ibG9nL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDIzLzA1L21pemZhX3Rvb2xzXzcyMHAubXA0IiB0eXBlPSJ2aWRlby9tcDQiPg0KPC92aWRlbz4=