في تطبيقات الويب الحديثة، يعد التحكم في من يمكنه الوصول إلى الموارد أو تعديلها أمرًا بالغ الأهمية. على سبيل المثال، في تطبيق المدونة، قد ترغب في التأكد من أن مالك المنشور فقط يمكنه تحريره أو حذفه. يقدم Laravel طريقتين أنيقتين للتعامل مع التفويض: البوابات وفئات السياسة. سيرشدك هذا الدليل خلال كلتا الطريقتين، ويوضح لك كيفية حماية مواردك وضمان أمان تطبيقك.
توفر البوابات طريقة سريعة ومباشرة للتعامل مع التفويض باستخدام عمليات الإغلاق. إنها مثالية لعمليات فحص الترخيص البسيطة ويتم تعريفها في AuthServiceProvider.
دعونا نحدد بوابة للتأكد من أن مالك المنشور فقط يمكنه تحديث أو حذف المنشور:
تحديد البوابة: افتح 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; }); }
تطبيق البوابة: استخدم البوابة في طرق التحكم الخاصة بك لفرض منطق التفويض:
// 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 }
الايجابيات:
السلبيات:
أفضل حالة استخدام: التطبيقات الصغيرة أو حالات الاستخدام البسيطة التي تتطلب فحصًا سريعًا للترخيص. ?
توفر فئات السياسات نهجًا أكثر تنظيمًا وقابلية للتطوير للتعامل مع الترخيص. إنها توفر طريقة واضحة لإدارة قواعد التفويض المعقدة والحفاظ على تنظيم التعليمات البرمجية الخاصة بك. تكون السياسات مفيدة بشكل خاص عند العمل مع وحدات تحكم الموارد التي تتضمن عمليات CRUD القياسية: الفهرس، إنشاء، تحرير، تحديث، و تدمير.
إنشاء السياسة: إنشاء فئة سياسة باستخدام Artisan:
php artisan make:policy PostPolicy
تحديد أساليب السياسة: افتح فئة السياسة التي تم إنشاؤها وأضف طرقًا للتعامل مع الترخيص لكل إجراء:
// 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; } }
استخدام السياسة: تطبيق أساليب السياسة في إجراءات وحدة التحكم الخاصة بك:
// 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 طرقًا قوية للتعامل مع التفويض. تعتبر البوابات ممتازة لإجراء عمليات فحص سريعة وبسيطة، بينما توفر فئات السياسة نهجًا منظمًا لإدارة السيناريوهات المعقدة، خاصة في وحدات التحكم بالموارد باستخدام طرق مثل الفهرس، إنشاء، تحرير، التحديث، وتدمير. اختر الطريقة التي تناسب احتياجات تطبيقك بشكل أفضل واستمتع بقاعدة تعليمات برمجية آمنة ومنظمة جيدًا! ??
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3