"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > التفويض في Laravel - دليل المبتدئين

التفويض في Laravel - دليل المبتدئين

تم النشر بتاريخ 2024-11-07
تصفح:615

Authorization In Laravel - A Beginner

إتقان التفويض في Laravel: البوابات مقابل فئات السياسة ؟؟

في تطبيقات الويب الحديثة، يعد التحكم في من يمكنه الوصول إلى الموارد أو تعديلها أمرًا بالغ الأهمية. على سبيل المثال، في تطبيق المدونة، قد ترغب في التأكد من أن مالك المنشور فقط يمكنه تحريره أو حذفه. يقدم Laravel طريقتين أنيقتين للتعامل مع التفويض: البوابات وفئات السياسة. سيرشدك هذا الدليل خلال كلتا الطريقتين، ويوضح لك كيفية حماية مواردك وضمان أمان تطبيقك.

بوابات في لارافيل؟

توفر البوابات طريقة سريعة ومباشرة للتعامل مع التفويض باستخدام عمليات الإغلاق. إنها مثالية لعمليات فحص الترخيص البسيطة ويتم تعريفها في AuthServiceProvider.

إعداد البوابة

دعونا نحدد بوابة للتأكد من أن مالك المنشور فقط يمكنه تحديث أو حذف المنشور:

  1. تحديد البوابة: افتح AuthServiceProvider وأضف تعريفات البوابة الخاصة بك:

    // app/Providers/AuthServiceProvider.php
    
    use Illuminate\Support\Facades\Gate;
    use App\Models\Post;
    
    public function boot()
    {
        $this->registerPolicies();
    
        Gate::define('update-post', function ($user, Post $post) {
            return $user->id === $post->user_id;
        });
    
        Gate::define('delete-post', function ($user, Post $post) {
            return $user->id === $post->user_id;
        });
    }
    
  2. تطبيق البوابة: استخدم البوابة في طرق التحكم الخاصة بك لفرض منطق التفويض:

    // app/Http/Controllers/PostController.php
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Gate;
    use App\Models\Post;
    
    public function update(Request $request, Post $post)
    {
        if (Gate::denies('update-post', $post)) {
            abort(403, 'You do not own this post. ?');
        }
    
        // Proceed with updating the post
    }
    
    public function destroy(Post $post)
    {
        if (Gate::denies('delete-post', $post)) {
            abort(403, 'You do not own this post. ?');
        }
    
        // Proceed with deleting the post
    }
    

إيجابيات وسلبيات البوابات

الايجابيات:

  • البساطة: سريع الإعداد باستخدام الحد الأدنى من التعليمات البرمجية. ⚡
  • مثالي للبساطة: مثالي لتطبيقات الموارد الفردية أو السيناريوهات المباشرة. ?

السلبيات:

  • قابلية التوسع: يمكن أن تصبح مرهقة ويصعب إدارتها مع نمو تطبيقك. ?
  • الصيانة: قد تصبح فوضوية إذا لم تكن منظمة بشكل جيد. ?

أفضل حالة استخدام: التطبيقات الصغيرة أو حالات الاستخدام البسيطة التي تتطلب فحصًا سريعًا للترخيص. ?

فئات السياسة في Laravel ️

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

إنشاء واستخدام السياسة

  1. إنشاء السياسة: إنشاء فئة سياسة باستخدام Artisan:

    php artisan make:policy PostPolicy
    
  2. تحديد أساليب السياسة: افتح فئة السياسة التي تم إنشاؤها وأضف طرقًا للتعامل مع الترخيص لكل إجراء:

    // app/Policies/PostPolicy.php
    
    namespace App\Policies;
    
    use App\Models\User;
    use App\Models\Post;
    
    class PostPolicy
    {
        /**
         * Determine if the user can view the list of posts.
         *
         * @param User $user
         * @return bool
         */
        public function viewAny(User $user)
        {
            // Example logic to allow viewing posts for authenticated users
            return true;
        }
    
        /**
         * Determine if the user can create a post.
         *
         * @param User $user
         * @return bool
         */
        public function create(User $user)
        {
            return true;
        }
    
        /**
         * Determine if the user can update the post.
         *
         * @param User $user
         * @param Post $post
         * @return bool
         */
        public function update(User $user, Post $post)
        {
            return $user->id === $post->user_id;
        }
    
        /**
         * Determine if the user can delete the post.
         *
         * @param User $user
         * @param Post $post
         * @return bool
         */
        public function delete(User $user, Post $post)
        {
            return $user->id === $post->user_id;
        }
    }
    
  3. استخدام السياسة: تطبيق أساليب السياسة في إجراءات وحدة التحكم الخاصة بك:

    // app/Http/Controllers/PostController.php
    
    use Illuminate\Http\Request;
    use App\Models\Post;
    
    public function update(Request $request, Post $post)
    {
        $this->authorize('update', $post);
        // Proceed with updating the post
    }
    
    public function destroy(Post $post)
    {
        $this->authorize('delete', $post);
        // Proceed with deleting the post
    }
    

إيجابيات وسلبيات فئات السياسة

الايجابيات:

  • التنظيم: يوفر طريقة نظيفة ومنظمة للتعامل مع منطق التفويض المعقد. ?
  • قابلية الصيانة: أسهل في الإدارة والصيانة مع نمو التطبيق. ⁉️
  • دعم الإطار: يستفيد من دعم إطار العمل المدمج في Laravel للحصول على ترخيص متسق. ?

السلبيات:

  • الإعداد الأولي: إعداد أكثر قليلاً مقارنة بالبوابات. ⚙️
  • التعقيد: قد يكون الأمر مبالغًا فيه بالنسبة لسيناريوهات الترخيص البسيطة جدًا. ?

أفضل سيناريو للحالة : مثالي للتطبيقات ذات متطلبات الترخيص المعقدة أو عندما تهدف إلى الحصول على تعليمات برمجية نظيفة وقابلة للصيانة. ?


ملخص

توفر كل من البوابات وفئات السياسات في Laravel طرقًا قوية للتعامل مع التفويض. تعتبر البوابات ممتازة لإجراء عمليات فحص سريعة وبسيطة، بينما توفر فئات السياسة نهجًا منظمًا لإدارة السيناريوهات المعقدة، خاصة في وحدات التحكم بالموارد باستخدام طرق مثل الفهرس، إنشاء، تحرير، التحديث، وتدمير. اختر الطريقة التي تناسب احتياجات تطبيقك بشكل أفضل واستمتع بقاعدة تعليمات برمجية آمنة ومنظمة جيدًا! ??

بيان الافراج تم نشر هذه المقالة على: https://dev.to/mohammed_kareem/authorization-in-laravel-a-beginners-guide-32kf?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3