التفويض القائم على السياسات
عرّفوا سياسات تفويض قابلة لإعادة الاستخدام
التفويض القائم على السياسات درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.
نموذج السياسات
في ASP.NET Core، يمر كل فحص للتفويض في النهاية عبر سياسة. وتُعد سمات الأدوار والمطالبات اختصارات تنشئ السياسات خلف الكواليس.
يؤدي تعريف السياسات المُسمّاة إلى توحيد قواعدك والحفاظ على نظافة وحدات التحكم.
[Authorize(Policy = "CanManageOrders")]AddAuthorization
سجّل السياسات في حاوية الخدمات باستخدام AddAuthorization. ويُمنح كلُّ سياسة اسمًا فريدًا.
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("CanManageOrders", policy =>
policy.RequireRole("admin", "sales"));
});RequireAuthenticatedUser
أبسط متطلب هو أن يكون المستخدم قد سجّل دخوله. يرفض RequireAuthenticatedUser المتصلين المجهولين.
options.AddPolicy("SignedIn", policy =>
policy.RequireAuthenticatedUser());تركيب المتطلبات
يسلسل منشئ السياسة عدة متطلبات؛ ولا تنجح السياسة إلا إذا اجتازت كلها.
options.AddPolicy("SeniorEditor", policy =>
policy
.RequireAuthenticatedUser()
.RequireRole("editor")
.RequireClaim("seniority", "senior"));السياسة الافتراضية
يستخدم [Authorize] المجرد من دون وسيطات السياسة الافتراضية، التي تكتفي افتراضيًا بطلب مستخدم مُصادَق عليه. ويمكنك استبدالها.
options.DefaultPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireClaim("email_verified", "true")
.Build();السياسة الاحتياطية
تنطبق السياسة الاحتياطية على نقاط النهاية التي لا تحتوي أي سمة تفويض على الإطلاق، وهي طريقة قوية للتأمين افتراضيًا.
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
// Now every endpoint requires auth unless marked [AllowAnonymous]الاستثناء باستخدام AllowAnonymous
عندما تفرض السياسة الاحتياطية الحماية على كل شيء، استخدم [AllowAnonymous] لإتاحة نقاط النهاية العامة مثل تسجيل الدخول أو فحوصات الحالة.
[AllowAnonymous]
[HttpGet("health")]
public IActionResult Health() => Ok("healthy");تطبيق السياسات على نقاط النهاية
أشِر إلى السياسة باستخدام اسمها في السمات أو امتدادات Minimal API.
// Controller
[Authorize(Policy = "SeniorEditor")]
public IActionResult Publish() => Ok();
// Minimal API
app.MapPost("/publish", () => Results.Ok())
.RequireAuthorization("SeniorEditor");تجميع نقاط النهاية
طبّق سياسة على مجموعة مسارات كاملة بحيث ترثها كل نقطة نهاية داخل المجموعة.
var admin = app.MapGroup("/admin")
.RequireAuthorization("CanManageOrders");
admin.MapGet("/stats", () => Results.Ok());
admin.MapDelete("/{id}", (int id) => Results.NoContent());المتطلبات خلف الكواليس
يضيف كل استدعاء من نوع Require* عنصر IAuthorizationRequirement إلى السياسة. ويقيّم معالج مطابق كل متطلب. يحدث ذلك تلقائيًا للمتطلبات المضمّنة، أما القواعد المخصصة فتحتاج إلى معالج مخصص (في الدرس التالي).
// RequireRole("admin") adds a RolesAuthorizationRequirement
// RequireClaim(...) adds a ClaimsAuthorizationRequirementموضع تعريف السياسات
احتفظ بكل تعريفات السياسات في طريقة امتداد واحدة حتى يسهل العثور عليها واختبارها.
public static IServiceCollection AddAppPolicies(
this IServiceCollection services)
{
services.AddAuthorization(o =>
{
o.AddPolicy("SignedIn", p => p.RequireAuthenticatedUser());
o.AddPolicy("CanManageOrders", p => p.RequireRole("admin"));
});
return services;
}اختبار سريع
اختبر فهمك للسياسات الافتراضية والاحتياطية.
مراجعة
لقد تعلمت التفويض القائم على السياسات:
- يعرّف
AddPolicyقواعد مُسمّاة قابلة لإعادة الاستخدام. - يُركّب
RequireAuthenticatedUserوRequireRoleوRequireClaimباستخدام دلالة AND. - تدعم DefaultPolicy سمة
[Authorize]المجردة، بينما تؤمّن FallbackPolicy نقاط النهاية غير المعلَّمة. - تتيح
[AllowAnonymous]الاستثناء من السياسة.
التالي: متطلبات التفويض ومعالجاته المخصصة.
الأسئلة الشائعة
هل درس «التفويض القائم على السياسات» مجاني؟
نعم — نص درس «التفويض القائم على السياسات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.
ماذا ستتعلم في «التفويض القائم على السياسات»؟
عرّفوا سياسات تفويض قابلة لإعادة الاستخدام تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟
لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التفويض القائم على السياسات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟
نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- التفويض القائم على الأدوار
- التفويض القائم على المطالبات
- التفويض القائم على السياسات
- متطلبات التفويض المخصّصة