Gates: عمليات تحقق بسيطة من التفويض
عرّفوا Gates وقيّموها لمنطق صلاحيات إجراءات المستخدم
Gates: عمليات تحقق بسيطة من التفويض درس مجاني في PHP Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في PHP Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة PHP Academy 4 دروس في المجموع.
ما هي Gates؟
إن Gates في Laravel عبارة عن دوال إغلاق تحدد ما إذا كان المستخدم مخوّلًا لتنفيذ إجراء معين. وهي عمليات تحقق بسيطة وعامة من التفويض، ولا ترتبط بنموذج محدد.
تعريف Gate
عرّف Gates في App\Providers\AppServiceProvider أو في AuthServiceProvider مخصص باستخدام الواجهة Gate.
<?php
use Illuminate\Support\Facades\Gate;
// In a service provider's boot() method:
Gate::define("delete-post", function (User $user, Post $post) {
return $user->id === $post->user_id;
});التحقق من Gate (السماح أو الرفض)
تحقق من نتائج Gate باستخدام Gate::allows() أو Gate::denies().
<?php
if (Gate::allows("delete-post", $post)) {
$post->delete();
}
if (Gate::denies("delete-post", $post)) {
abort(403);
}استخدام authorize() في وحدات التحكم
استدعِ $this->authorize() داخل وحدة التحكم — إذ يُلقي تلقائيًا AuthorizationException (403) عند الفشل.
<?php
public function destroy(Post $post): RedirectResponse
{
$this->authorize("delete-post", $post);
$post->delete();
return redirect()->route("posts.index");
}استخدام @can في Blade
استخدم التوجيه @can لعرض عناصر الواجهة بشكل مشروط بناءً على عمليات التحقق من Gates.
@can('delete-post', $post)
<form method="POST" action="/posts/{{ $post->id }}">
@csrf @method('DELETE')
<button>Delete</button>
</form>
@endcanGate::before
يُنفّذ الاستدعاء before قبل جميع عمليات التحقق الأخرى من Gates — وهذا مفيد لمنح المسؤولين صلاحية وصول كاملة.
<?php
Gate::before(function (User $user, string $ability) {
if ($user->isAdmin()) return true; // skip further checks
});Gate::after
يُنفّذ after بعد جميع عمليات التحقق من Gates. وتتجاوز القيمة غير الفارغة التي يعيدها نتيجة Gate.
إعادة الاستجابات
يمكن لـ Gates إعادة كائن Response لعرض رسائل خطأ مخصصة.
<?php
Gate::define("publish-post", function (User $user, Post $post) {
return $user->isEditor()
? Response::allow()
: Response::deny("You must be an editor to publish.");
});forUser()
تحقق من Gate لمستخدم آخر، وليس للمستخدم الذي تمت مصادقته.
<?php
if (Gate::forUser($otherUser)->allows("delete-post", $post)) {
// ...
}المستخدمون الضيوف
تُعيد Gates تلقائيًا القيمة false للمستخدمين غير المصادق عليهم افتراضيًا. حدّد نوع المستخدم على أنه قابل للقيمة الفارغة للسماح بعمليات التحقق للضيوف.
<?php
Gate::define("view-post", function (?User $user, Post $post) {
return $post->is_published || $user?->id === $post->user_id;
});Gates أم Policies؟
Gates هي دوال إغلاق بسيطة لعمليات التحقق المخصصة. أما Policies فهي أصناف للتفويض المستند إلى النماذج — استخدم Policies عندما يكون لديك عدة إجراءات على النموذج نفسه.
الملخص
Gates هي دوال إغلاق عامة للتفويض. عرّفها في موفّر خدمة. وتحقق منها باستخدام Gate::allows() أو $this->authorize() أو @can في Blade.
تحقق سريع
أي طريقة في وحدة التحكم تُلقي الخطأ 403 تلقائيًا عند فشل Gate؟
الأسئلة الشائعة
هل درس «Gates: عمليات تحقق بسيطة من التفويض» مجاني؟
نعم — نص درس «Gates: عمليات تحقق بسيطة من التفويض» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة PHP Academy، انتقل إلى CoddyKit PRO. تتضمن دورة PHP Academy 4 دروس في المجموع.
ماذا ستتعلم في «Gates: عمليات تحقق بسيطة من التفويض»؟
عرّفوا Gates وقيّموها لمنطق صلاحيات إجراءات المستخدم تتمرن على PHP Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ PHP Academy؟
لا تُشترط خبرة سابقة. PHP Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «Gates: عمليات تحقق بسيطة من التفويض»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس PHP Academy هذا؟
نعم. كل درس في PHP Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المصادقة باستخدام Laravel Breeze
- حماية المسارات باستخدام Middleware
- Gates: عمليات تحقق بسيطة من التفويض
- Policies: التفويض القائم على النماذج