أين يجب أن أضع رمز التحقق من جلسة CAS في تطبيق CakePHP؟

StackOverflow https://stackoverflow.com/questions/1211391

  •  06-07-2019
  •  | 
  •  

سؤال

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

  • يتحقق مع خادم CAS لمعرفة ما إذا كان المستخدم قد قام بتسجيل الدخول
  • تسحب بعض بيانات الاعتماد من الخادم إذا كان الأمر كذلك
  • يتحقق من بيانات الاعتماد مقابل قائمة التحكم بالوصول (ACL) الداخلية، حيث أن مجموعة الأشخاص الذين يمكنهم الوصول إلى التطبيق هي مجموعة فرعية من المجموعة التي يمكنها تسجيل الدخول إلى خدمة CAS.
  • يوفر بعض الآليات للمستخدمين الإداريين، إما عن طريق إنشاء مستخدمين إداريين خاصين خارج نظام CAS (مع كل المشاكل التي قد تنطوي عليها) أو عن طريق ترقية مستخدمي CAS معينين (مع المشاكل المختلفة التي قد تنطوي عليها).

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

أخيرًا، أعلم أن CakePHP يوفر كلاً من مكونات Auth وACL، لكن عندما فكرت في استخدامها لم يبدوا قابلين للتفاعل مع خدمات المصادقة الخارجية.هل أنا مخطئ، وهل سيكون أي من هذين الخيارين مناسبًا لما يجب أن أفعله؟

شكرًا!

هل كانت مفيدة؟

المحلول

إذا ألقيت نظرة على الكعكة المكونات الأساسية يمكنك أن ترى أن متطلبات CAS الخاصة بك تتناسب مع نوع الأشياء التي تُستخدم عادةً من أجلها (على سبيل المثال.المصادقة/الجلسة).

أوصي بإنشاء ملف CasAuthComponent.هناك بعض المعلومات عنها تمتد AuthComponent, ، في إجابة سابقة لي، والتي قد تكون مفيدة إذا كنت ترغب في البناء على الجزء العلوي من النواة الموجودة AuthComponent.

يمكن للمكون (رمز وحدة التحكم القابل لإعادة الاستخدام بشكل أساسي) التفاعل مع النماذج واستخدام مكونات أخرى (مثل الجلسة) والتحكم في تدفق المستخدم (عمليات إعادة التوجيه على سبيل المثال)

لاحظ أن جوهر AuthComponent في الواقع يسترد المعلومات من نموذج (نموذج المستخدم افتراضيًا)، لذا يمكنك القيام بشيء مماثل.

ال CasAuthComponent يمكنك إنشاء ما يمكن $use نموذج مستخدم خارجي (CasUser ربما) وهو المسؤول عن عمليات CRUD على البيانات (استرجاع المستخدمين بشكل أساسي).

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

يمكن تجميع النتيجة النهائية في مكون إضافي:

  • CasAuthComponent (app/plugins/cas/controllers/components/cas_auth.php)
  • CasUser (app/plugins/cas/models/cas_user.php)
  • CasSource (app/plugins/cas/models/datasources/cas_source.php) [خياري]

ويتم استخدامه في التطبيق الخاص بك عن طريق وضع ما يلي في app_controller الخاص بك:

public $components = array('Cas.CasAuthComponent');

إذا كنت ترغب في أن تكون قادرًا على إدارة المستخدمين من Cake، فيمكنك أيضًا تضمين وحدة تحكم وطرق عرض في مكونك الإضافي، مما يسمح للمستخدم بالتفاعل مع CasUser نموذج (أي. $this->CasUser->save()).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top