محتويات الدورة

Laravel / حدود التطبيق وسير العمل الموثوق / الدرس 10

السياسات وتفويض الموارد

ضع قرار الوصول عند حد المورد بالخادم وميز المصادقة والربط والتحقق والعرض.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • تسمية العملية والمورد
  • قاعدة ملكية العينة في سياسة
  • مراجعة التجاوز والقوائم والتغير المتزامن

تسمية العملية والمورد

يسأل التفويض عن ممثل وعملية ومورد وسياق، ولا يكفي الدخول لتعديل غيره. تناسب gates القرارات والسياسات مجموعة عمليات المورد. قاعدة العينة تسمح للمستخدم المصادق المحفوظ بالإنشاء ولمؤلف المنشور بالتعديل. تحتاج الأدوار والمستأجر والإشراف والتفويض الإضافي قواعد صريحة لا افتراضات خفية.

وضوح تسجيل السياسة واستدعائها

تكتشف Laravel السياسات وفق اصطلاحها أو تسجل Gate::policy صراحة؛ تحقق من الصنف الفعلي. لا تفيد طريقة لا يستدعيها المسار. يوفر ربط النموذج موردا أو غيابا ولا يثبت الملكية. صادق المسار وفوض القدرة قبل التغيير، ولتكشف الاختبارات حذف الاستدعاء.

قاعدة ملكية العينة في سياسة

يفترض الأول المستخدم والمنشور ومعرفاتهما وuser_id، ويقارن تمثيل المعرف النصي لتجنب فرق نوع سلمي مكافئ. يلزم عقد المخطط؛ وقد تحتاج هوية مركبة أو مستأجر قاعدة أخرى. تدعم create طلب الدرس السابق. يكتشف الاصطلاح PostPolicy أو تسجل صراحة في boot. لا يقدم المثال تجاوزا إداريا.

php مقطع سياقي لتطبيق Laravel 12
<?php
namespace App\Policies;
use App\Models\Post;
use App\Models\User;
class PostPolicy
{
    public function create(User $user): bool
    {
        return $user->exists;
    }
    public function update(User $user, Post $post): bool
    {
        return (string) $user->getAuthIdentifier() === (string) $post->user_id;
    }
}
الناتج المتوقع
Synthetic Post user_id=7: User id=7 allowed; User id=9 denied.

استخدم الاكتشاف الاصطلاحي أو الربط الصريح؛ يسمح للمؤلف المحفوظ بتعديل منشوره ويرفض غيره.

تفويض الكتابة قبل تنفيذها

يفوض المتحكم التعديل قبل التحقق والكتابة ويفترض المسار المصادق والسياسة والمخطط والمسار المسمى. قد تفوض Form Request بدلا منه حسب التصميم. لا يختار العميل المؤلف. يمنع B من منشور A دون تغيير، ويسمح A بعد التحقق؛ إنها توقعات اختبار لا تشغيل قاعدة مدعى.

php مقطع سياقي لتطبيق Laravel 12
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\Gate;
class UpdatePostController extends Controller
{
    public function update(Request $request, Post $post): RedirectResponse
    {
        Gate::authorize("update", $post);
        $data = $request->validate([
            "title" => ["required", "string", "max:120"],
            "body" => ["required", "string", "max:5000"],
        ]);
        $post->update(["title" => $data["title"], "body" => $data["body"]]);
        return redirect()->route("posts.show", $post);
    }
}
الناتج المتوقع
Authenticated non-author: 403 and unchanged post. Valid author request: update then redirect.

يتطلب المسار والسياسة والمخطط؛ يسبق المنع التعديل ولا يكتب إلا الحقلين.

مراجعة التجاوز والقوائم والتغير المتزامن

تحسن can في Blade العرض ولا تمنع طلبا مباشرا. قلل حقول المورد ونطاق القائمة؛ لا تصفي viewAny الصفوف. راجع before والتجاوزات لأنها قد توسع القدرات. إذا تغيرت الملكية أو الحالة فنسقها بمعاملة لا تعتبر القرار حجزا. اختبر الضيف والمالك والآخر والمفقود والدور الحقيقي منفصلة.

الأخطاء الشائعة وإصلاحها

يعد النموذج المربوط مأذونا

لماذا يحدث؟
اختلط الوجود بالإذن.
كيف تصلحه؟
استدع القدرة للممثل والمورد.
كيف تتجنب تكراره؟
اختبر مستخدما آخر مباشرة.

لا تستشار السياسة

لماذا يحدث؟
لا يطابق التسجيل موضع الصنف.
كيف تصلحه؟
تحقق من الربط وحالة رفض.
كيف تتجنب تكراره؟
احفظ اختبار فرضها.

تمنع الصفحة وتقبل الكتابة المباشرة

لماذا يحدث؟
أخفي العرض فقط.
كيف تصلحه؟
فوض قبل تعديل الخادم.
كيف تتجنب تكراره؟
اعتبر الواجهة تغذية إضافية.

اختبر فهمك

1. هل تعني viewAny الناجحة جواز كل صف؟

اعرض الحل المشروح

لا؛ قد تسمح بالقائمة وتظل محتاجة نطاقا للمستأجر والملك والنشر. اختبر عدم ظهور المستبعد، ولا تعوض فحوص بعد الجلب استعلاما مقيدا.

2. أي تأكيد يثبت عدم نجاح تعديل ممنوع جزئيا؟

اعرض الحل المشروح

أكد المنع ثم أعد قراءة العنوان والمؤلف الأصليين؛ فقد تكتب العملية قبل الرفض. أضف نجاح المالك حتى لا يمر رفض دائم.

أهم ما تعلمته

  • افصل ربط الوجود وتفويض الإذن.
  • يفرض الخادم قبل التعديل.
  • اختبر الرفض وحفظ الحالة.

المراجع الرسمية