سؤال

أنا جزء من فريق إنشاء تطبيق ويب باستخدام PHP و MySQL.التطبيق سوف يكون العديد من المستخدمين مع أدوار مختلفة.سيقوم التطبيق أيضا أن تستخدم في الموزعة جغرافيا الطريقة.لذلك نحن بحاجة إلى إنشاء نظام التحكم في الوصول التي تعمل على مستويين:

  1. يتحكم المستخدم أذونات محددة صفحات php أييوفر أو تنفي إمكانية الوصول إلى صفحات معينة (أو عناصر واجهة المستخدم) على أساس دور المستخدم.على سبيل المثال:المستخدم يمكن أن يسمح الوصول إلى "الطلاب" صفحة ولكن ليس إلى "المعلمين" صفحة.
  2. يتحكم المستخدم أذونات محددة سجلات قاعدة البيانات أييعدل استعلامات قاعدة البيانات بحيث محددة فقط يتم عرض السجلات.على سبيل المثال, المستخدم على مستوى المدينة ، إلا أن هذه السجلات يجب أن يتم عرض التي تتعلق بالمستخدم المدينة معينة ، في حين أن المستخدم على المستوى الوطني ، بسجلات لجميع المدن في البلاد يجب أن يتم عرض.

أحتاج مساعدة في تصميم نظام التي يمكن التعامل مع كل هذه الأنواع من التحكم في الوصول.نقطة لا.1 يبدو أن تكون بسيطة بما فيه الكفاية.ولكن أنا تماما في حيرة حول كيفية القيام النقطة رقم 2 بدون hardcoding المعلومات في استعلامات SQL.

سيكون موضع تقدير أي مساعدة.

شكرا مقدما

Vinayak

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

المحلول

كنت في حالة مماثلة قبل بضعة أشهر.وجدت أن أدوات مثل Zend_ACL عمل عظيم إذا كنت مجرد التحقق من مستوى الوصول إلى عنصر واحد (أو منخفضة إلى حد معقول عدد منهم).فشل عندما كنت في حاجة للحصول على قائمة كبيرة من العناصر يسمح للمستخدم الوصول.أنا وضعت مخصص حل هذه المشكلة باستخدام عمل مندوب نمط.دينار بحريني يوفر منطق الأعمال التي يمكن تطبيقها في سياق محدد.في هذا السيناريو SQL المنطق سلمت و تستخدم في حالة تصفية في subselect.انظر المخططات التالية:

alt text
(المصدر: epsi.pl)

و تسلسل الرسم البياني الذي يوضح يدعو النظام:

alt text
(المصدر: epsi.pl)

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

نصائح أخرى

لا أعلم عن تفاصيل مشكلتك ولكن زند الإطار قوية بدلا ACL و المصادقة مجموعة من المكونات التي قد ترغب في النظر في.الأشياء الجيدة مثل دقيق جدا التحكم في الوصول, تخزين بيانات persistance المتقدمة المشروط القواعد.

يبدو لي أن ما تحتاجه هو هذا:(سوف تستخدم البلد/الدولة/المدينة) ،

  1. قائمة من جميع البلدان.كل "دولة" غير معرف.
  2. قائمة من جميع الدول في البلدان.كل دولة لا بد أن معرف coutnry ، ولكن أيضا لديه معرف فريدة من نوعها.
  3. قائمة بجميع المدن.كل مدينة لا بد إما إلى الدولة ، أو مباشرة إلى بلد ، وقد علم أن يبين.

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

وذلك أساسا, كل sub الفريق يعتمد على مجموعة فوقه ، وعلى الرغم من أنني لا أتذكر بشكل صحيح, أعتقد يمكنك استخدام الاستعلامات الفرعية أن تفعل خدعة من هناك.

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

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

كنت أبحث على العثور على شخص ما بالفعل تنفيذ الحل ، ولكن يبدو أن لا أحد فعل.دعونا نأمل أنها لن تفشل :)

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