0Pricing
C# Academy · درس

التفويض القائم على المطالبات

فوّضوا الوصول استنادًا إلى مطالبات المستخدمين

التفويض القائم على المطالبات درس مجاني في C# Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C# Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C# Academy 4 دروس في المجموع.

ما بعد الأدوار

الأدوار حالة خاصة من المطالبات. يفحص التفويض القائم على المطالبات أي مطالبة - مثل البريد الإلكتروني أو القسم أو فئة الاشتراك أو علامة الصلاحية - وليس الأدوار فقط.

يمنحك هذا تحكمًا أدق من دون ابتكار عشرات الأدوار.

// Claims a user might carry:
// department = sales
// subscription = pro
// email_verified = true

إضافة المطالبات إلى رمز مميز

أصدر أي مطالبات ستفحصها قواعد التفويض لديك. المطالبة هي زوج من النوع والقيمة.

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()),
    new Claim("department", "sales"),
    new Claim("subscription", "pro"),
    new Claim("email_verified", "true")
};

تعريف سياسة للمطالبات

تُعبَّر عن القواعد القائمة على المطالبات باستخدام سياسات مُسمّاة تُسجَّل مع AddAuthorization. ويشترط RequireClaim أن يمتلك المستخدم مطالبة محددة.

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("VerifiedEmail", policy =>
        policy.RequireClaim("email_verified", "true"));
});

RequireClaim من دون قيمة

إذا كان ما يهمك هو أن تكون المطالبة موجودة فقط (بأي قيمة)، فاستدعِ RequireClaim بتمرير النوع وحده.

options.AddPolicy("HasDepartment", policy =>
    policy.RequireClaim("department"));

RequireClaim مع قيم مسموحة

يمكنك سرد القيم المسموحة؛ وتنجح السياسة إذا طابقت المطالبة أيًّا منها.

options.AddPolicy("PaidTier", policy =>
    policy.RequireClaim("subscription", "pro", "enterprise"));

تطبيق سياسة للمطالبات

أشِر إلى السياسة باستخدام اسمها في [Authorize].

[Authorize(Policy = "PaidTier")]
[HttpGet("premium-reports")]
public IActionResult Reports() => Ok();

الاستخدام في Minimal API

تشير Minimal APIs إلى اسم السياسة نفسه من خلال RequireAuthorization.

app.MapGet("/premium-reports", () => Results.Ok())
   .RequireAuthorization("PaidTier");

دمج عدة متطلبات للمطالبات

يمكن للسياسة تسلسل عدة استدعاءات لـ RequireClaim؛ ويجب استيفاؤها جميعًا (AND).

options.AddPolicy("VerifiedSales", policy =>
    policy
        .RequireClaim("email_verified", "true")
        .RequireClaim("department", "sales"));

RequireAssertion للمنطق المخصص

عندما لا يكون التحقق من قيمة ثابتة كافيًا، ينفّذ RequireAssertion مسندًا عشوائيًا على ClaimsPrincipal.

options.AddPolicy("AdultUser", policy =>
    policy.RequireAssertion(ctx =>
    {
        var dob = ctx.User.FindFirst("birthdate")?.Value;
        return DateTime.TryParse(dob, out var d) &&
               d <= DateTime.UtcNow.AddYears(-18);
    }));

قراءة المطالبات وقت التشغيل

يمكنك داخل الإجراء فحص المطالبات مباشرةً عندما تحتاج إلى القيمة نفسها، وليس إلى مجرد بوابة بنعم أو لا.

var dept = User.FindFirst("department")?.Value;
var isPro = User.HasClaim("subscription", "pro");

المطالبات مقابل الأدوار - متى تستخدم كلًّا منهما

استخدم الأدوار لوظائف العمل العامة. واستخدم المطالبات للسمات وعلامات الميزات. ويمكن دمجهما؛ إذ يمكن للسياسة أن تتطلب دورًا وعدة مطالبات معًا.

options.AddPolicy("SalesManager", policy =>
    policy.RequireRole("manager")
          .RequireClaim("department", "sales"));

اختبار سريع

تأكد من فهمك لسياسات المطالبات.

مراجعة

لقد تعلمت التفويض القائم على المطالبات:

  • يمكن لأي مطالبة - وليس الأدوار فقط - التحكم في الوصول.
  • يتحقق RequireClaim من وجود المطالبة أو من قيم مسموحة محددة.
  • يتعامل RequireAssertion مع منطق المسندات المخصص.
  • يمكن دمج المطالبات والأدوار داخل سياسة مُسمّاة واحدة.

التالي: النموذج الكامل القائم على السياسات.

الأسئلة الشائعة

هل درس «التفويض القائم على المطالبات» مجاني؟

نعم — نص درس «التفويض القائم على المطالبات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C# Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C# Academy 4 دروس في المجموع.

ماذا ستتعلم في «التفويض القائم على المطالبات»؟

فوّضوا الوصول استنادًا إلى مطالبات المستخدمين تتمرن على C# Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C# Academy؟

لا تُشترط خبرة سابقة. C# Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.

كم من الوقت يستغرق درس «التفويض القائم على المطالبات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C# Academy هذا؟

نعم. كل درس في C# Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. التفويض القائم على الأدوار
  2. التفويض القائم على المطالبات
  3. التفويض القائم على السياسات
  4. متطلبات التفويض المخصّصة
← العودة إلى C# Academy