بررسی تفاوت بین Role و Policy و نحوه استفاده از آنها

تفاوت Role و Policy در ASP.NET Core

توسط admin | گروه برنامه نویسی | 1403/12/13

نظرات 0

تفاوت Policy و Role در Blazor

بیایید با یک مثال عملی در Blazor تفاوت Role و Policy را بررسی کنیم. فرض کنید جدول AspNetRoles شامل رول‌های زیر است: 

  • Suspension (کاربر مسدودشده)

  • Administrator (مدیر سیستم)

  • Operator (اپراتور)

  • Customer (مشتری)


۱. Role-Based Authorization (احراز هویت مبتنی بر نقش)

در این روش، دسترسی‌ها مستقیماً بر اساس نام رول کاربر تعیین می‌شوند.
مثال:

 
 
// در یک کامپوننت Blazor
<AuthorizeView Roles="Administrator">
 
<h3>فقط مدیران این بخش را می‌بینند!</h3>
</AuthorizeView>
 
  • کاربرانی که رول Administrator دارند، این بخش را می‌بینند.

  • محدودیت: این روش فقط بررسی می‌کند کاربر در رول مورد نظر باشد.


۲. Policy-Based Authorization (احراز هویت مبتنی بر پالیسی)

پالیسی‌ها (Policy) ترکیبی از شرایط پیچیده هستند (مثلاً چند رول + قوانین سفارشی).
مثال: فرض کنید می‌خواهید کاربرانی اجازه ویرایش تنظیمات را داشته باشند که:

  • رول Administrator یا Operator داشته باشند.

  • و رول Suspension نداشته باشند (مسدود نباشند).

مرحله ۱: تعریف پالیسی در Program.cs (یا Startup.cs)

 
 
builder.Services.AddAuthorization(options =>
{
 
options.AddPolicy("EditSettings", policy =>
policy.RequireAssertion(context =>
{
// شرط ۱: کاربر Administrator یا Operator باشد.
bool isAdminOrOperator = context.User.IsInRole("Administrator") ||
context.User.IsInRole("Operator");
// شرط ۲: کاربر Suspension نباشد.
bool isNotSuspended = !context.User.IsInRole("Suspension");
return isAdminOrOperator && isNotSuspended;
}));
});
 

مرحله ۲: استفاده از پالیسی در کامپوننت Blazor

 
 
<AuthorizeView Policy="EditSettings">
<h3>فقط مدیران یا اپراتورهای غیرمسدود این بخش را می‌بینند!</h3>
</AuthorizeView>
 

تفاوت کلیدی:

ویژگی Role-Based Policy-Based
انعطاف‌پذیری فقط بر اساس نام رول ترکیب رول‌ها + قوانین سفارشی (مثلاً عدم وجود رول خاص)
مثال [Authorize(Roles = "Administrator")] [Authorize(Policy = "EditSettings")]
کاربرد دسترسی ساده دسترسی پیشرفته (مثلاً چند شرطی)

مثال واقعی از Policy:

فرض کنید می‌خواهید به کاربران Customer اجازه دهید فقط اگر:

  • اکانت آن‌ها تایید شده باشد (یک Claim به نام AccountVerified داشته باشند).

  • از رول Suspension برخوردار نباشند.

تعریف پالیسی:

 
 
options.AddPolicy("ActiveCustomer", policy =>
policy.RequireRole("Customer")
.RequireClaim("AccountVerified", "true")
.RequireAssertion(context => !context.User.IsInRole("Suspension")));

استفاده در کامپوننت:

 
 
<AuthorizeView Policy="ActiveCustomer">
<h3>مشتریان فعال این بخش را می‌بینند!</h3>
</AuthorizeView>
 

نتیجه‌گیری:

  • Role: برای دسترسی‌های ساده (فقط بررسی وجود/عدم وجود یک رول).

  • Policy: برای دسترسی‌های پیشرفته (ترکیب رول‌ها، کلیم‌ها، و قوانین سفارشی).

با استفاده از پالیسی‌ها، می‌توانید شرایط پیچیده‌تری را برای دسترسی کاربران تعیین کنید که فقط با رول‌ها ممکن نیست! 😊

 

 

0 نظر

نظر محترم شما در مورد مقاله های وب سایت برنامه نویسی و پایگاه داده

نظرات محترم شما در خدمات رسانی بهتر ما را یاری می نمایند. لطفا اگر مایل بودید یک نظر ما را مهمان فرمائید. آدرس ایمیل و وب سایت شما نمایش داده نخواهد شد.

حرف 500 حداکثر

اطلاعات تماس

  • آدرس:اصفهان-خیابان ام کلثوم غربی - بعد خیابان تخم چی - بیست متر بعد از پیتزا ننه شب - کوچه تعمیر گاه سمار زغالی - پلاک 354 - درب مشکی - طبقه هفتم
  • آدرس ایمیل:najafzade@gmail.com
  • وب سایت:http://www.a00b.com/
  • تلفن ثابت:(+98)9131253620
  • تلفن همراه:09131253620