Jan 15, 2026

كيف تستخدم Pundit للحصول على التفويض في Hgr Rails؟

ترك رسالة

مرحبًا يا من هناك! باعتباري أحد موردي Hgr Rails، غالبًا ما يتم سؤالي عن كيفية استخدام Pundit للحصول على ترخيص في تطبيقات Hgr Rails. في منشور المدونة هذا، سأرشدك خلال العملية وأشاركك بعض النصائح التي ستجعل حياتك أسهل.

أولاً، دعونا نتحدث قليلاً عن ماهية Hgr Rails. تعد Hgr Rails جزءًا أساسيًا من العديد من أنظمة الحركة الخطية. إنها تتميز بالدقة العالية والمتانة، مما يجعلها ذات شعبية كبيرة في مختلف الصناعات. يمكنك معرفة المزيد عنهم في هذه الصفحة:القضبان هجر. وإذا كنت مهتمًا بالأنواع المختلفة من سكك التوجيه الخطية، فراجعهاأنواع السكك الحديدية الدليل الخطي. أحد الأنواع المحددة التي قد تكون مهتمًا بها هوالدليل الخطي GHH-CA.

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

Linear Guide Rail TypesGHH-CA Linear Guide suppliers

الشروع في العمل مع بونديت

الخطوة الأولى هي إضافة Pundit إلى تطبيق Rails الخاص بك. افتح الخاص بكحفظ الملفاتوأضف السطر التالي:

جوهرة "الناقد"

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

class ApplicationController < ActionController::Base تتضمن Pundit Rescue_from Pundit::NotAuthorizedError، مع: :user_not_authorized Private def user_not_authorized flash[:alert] = "غير مصرح لك بتنفيذ هذا الإجراء." redirect_to(request.referrer || root_path) نهاية النهاية

يتضمن هذا الرمز وحدة Pundit في ملفكوحدة تحكم التطبيقويقوم بإعداد كتلة إنقاذ عندما يحاول المستخدم تنفيذ إجراء غير مصرح له به.

خلق السياسات

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

القضبان تولد الناقد: منتج السياسة

سيؤدي هذا إلى إنشاء ملف يسمىProduct_policy.rbفيالتطبيق/السياساتدليل. افتح هذا الملف، وسترى البنية الأساسية مثل هذا:

فئة ProductPolicy < فهرس ApplicationPolicy def؟ نهاية كاذبة تظهر مواطنه؟ نهاية كاذبة مواطنه خلق؟ نهاية كاذبة مواطنه جديد؟ يخلق؟ نهاية التحديث مواطنه؟ نهاية كاذبة للتعديل مواطنه؟ تحديث؟ نهاية مواطنه تدمير؟ نهاية نهاية كاذبة

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

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

فئة ProductPolicy < فهرس ApplicationPolicy def؟ نهاية حقيقية تظهر مواطنه؟ نهاية حقيقية مواطنه خلق؟ المستخدم.المشرف؟ نهاية مواطنه الجديد؟ يخلق؟ نهاية التحديث مواطنه؟ المستخدم.المشرف؟ نهاية التعديل؟ تحديث؟ نهاية مواطنه تدمير؟ المستخدم.المشرف؟ نهاية النهاية

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

استخدام السياسات في وحدات التحكم

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

class ProductsController < ApplicationController def فهرس @products = Product.all يأذن @products end def show @product = Product.find(params[:id]) يأذن @product end def new @product = Product.new يأذن @product end def create @product = Product.new(product_params) يأذن @product إذا @product.save redirect_to @product، لاحظ: "تم إنشاء المنتج بنجاح." عرض آخر: نهاية نهاية جديدة def تحرير @product = Product.find(params[:id]) تفويض @product end def update @product = Product.find(params[:id]) تفويض @product إذا كان @product.update(product_params) يعيد التوجيه إلى @product، لاحظ: "تم تحديث المنتج بنجاح." عرض آخر: تحرير النهاية النهاية def تدمير @product = Product.find(params[:id]) يأذن @product @product.destroy redirect_to Products_url، لاحظ: 'تم تدمير المنتج بنجاح.' نهاية خاصة def Product_params params.require(:product).permit(:name, :price) end end

اليأذنيتم استدعاء الطريقة في كل إجراء للتحقق مما إذا كان المستخدم الحالي مصرحًا له بتنفيذ هذا الإجراء. إذا لم يكن المستخدم مصرحًا له، فسيقوم Pundit برفع أالناقد::خطأ غير مصرح به، والتي سيتم القبض عليها من قبلuser_not_authorizedالطريقة فيوحدة تحكم التطبيق.

السياسات ذات النطاق

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

أولاً، قم بإنشاء فئة نطاق لنموذجك. لمنتجنموذج، يمكنك إنشاءسياسة المنتج::النطاقفئة مثل هذا:

فئة ProductPolicy < نطاق فئة ApplicationPolicy < تحديد النطاق إذا كان user.admin؟ scope.all elsescope.where(user_id: user.id) end end end # طرق سياسة أخرى... end

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

ثم في الخاص بكوحدة تحكم المنتجات، يمكنك استخدام السياسة المحددة مثل هذا:

class ProductsController < ApplicationController def Index @products = Policy_scope(Product) Authorize @products end # إجراءات وحدة التحكم الأخرى... end

الPolicy_scopeترجع الطريقة علاقة ذات نطاق بناءً على السياسة المحددة التي حددتها.

خاتمة

يعد استخدام Pundit للحصول على الترخيص في تطبيقات Hgr Rails طريقة رائعة للحفاظ على التعليمات البرمجية الخاصة بك منظمة وآمنة. من خلال فصل منطق الترخيص الخاص بك إلى سياسات، يمكنك بسهولة إدارة من يمكنه تنفيذ الإجراءات في تطبيقك.

إذا كنت في السوق لشراء Hgr Rails أو غيرها من منتجات الحركة الخطية، فلا تتردد في التواصل معنا لمناقشة الشراء. نحن هنا لنقدم لك منتجات عالية الجودة وخدمة ممتازة.

مراجع

  • وثائق رسمية بونديت
  • أدلة القضبان على الترخيص
إرسال التحقيق