هل سيكون Django خيارًا جيدًا لتطبيق ويب يعتمد على الأذونات؟

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

  •  04-07-2019
  •  | 
  •  

سؤال

لقد قمت باستكشاف تفاصيل Django لمدة أسبوع تقريبًا وأعجبني ما أراه.ومع ذلك فقد توصلت إلى بعض..السلبية فيما يتعلق بالتحكم الدقيق في أذونات واجهة CRUD.

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

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

هل سيسمح لي Django ببناء أذونات/قواعد مخصصة ودمجها بسلاسة في واجهة المشرف CRUD؟

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

التحديث الثاني:

أريد أن أصف الأذونات المطلوبة لهذا المشروع.

يمكن أن ينتمي العميل إلى "متاجر" واحدة أو أكثر.يجب أن يكون الموظفون بدوام كامل قادرين فقط على تعديل العملاء في متجرهم (حتى لو كانوا ينتمون إلى متجر آخر).ومع ذلك، لا ينبغي أن يكونوا قادرين على رؤية/تحرير العملاء في متجر آخر.يجب أن يكون العارضون قادرين على عرض العملاء فقط بناءً على المتجر الذي تم إدراجهم فيه أيضًا (أو إذا تم تسجيل الدخول كمستخدم المتجر - على الأرجح).

يجب أن تكون الإدارة العليا قادرة على رؤية جميع الموظفين في المتاجر التي يديرونها، لا أكثر.

يجب أن تكون الإدارة العليا قادرة على تحرير جميع الموظفين ومنح الأذونات أدناه.

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

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

المحلول

إذا قرأت متطلباتك المحدثة بشكل صحيح، فلا أعتقد أن نظام المصادقة الحالي في Django سيكون كافيًا.يبدو أنك بحاجة إلى نظام ACL كامل.

وقد طرح هذا الموضوع عدة مرات.حاول البحث على Google على Django+acl.

عينات عشوائية...

كان هناك مشروع "صيف البرمجة" منذ عامين، لكنني لست متأكدًا من أين وصلوا.يرى http://code.djangoproject.com/wiki/GenericAuthorization

هناك تذكرة جديدة على djngoproject.org قد تكون مثيرة للاهتمام:

هناك بعض قصاصات التعليمات البرمجية المثيرة للاهتمام على dumpz.org:

...ولكن لا يوجد أي مستند.

حظ سعيد!

نصائح أخرى

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

وكل مستخدم لديه مجموعة من الأذونات وكذلك عضوية المجموعة. يمكن للمستخدمين الفرديين لديه أذونات الفردية. وأنها ترث الأذونات من عضوية المجموعة.

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

وإذا كان هذا لا يكفي بالنسبة لك، والملف إضافة على يمنحك مزيدا من الخيارات لتحديد "مستخدم" وقدراتها، الأذونات، والأدوار والمسؤوليات، وما إلى ذلك.

وإذا كان هذا لا يكفي بالنسبة لك، يمكنك تحديد أنظمة المصادقة الخاصة بك.


والمهم هو عدم محاولة وتحديد المجموعات التي هي مجموعات فرعية الفعلية للمستخدمين، وليس <م> عرضا عناوين أو أدوار محددة. تحتاج أبدا إلى "تعيين الأذونات لمجموعة فرعية من مجموعة". تحتاج إلى أن يكون مجموعات صغيرة. مجموعة محددة حول مجموعات فرعية من الناس.

والأذونات الافتراضية جانغو هي حول وصول نموذج، وليس صف الوصول ضمن نموذج. من ناحية أخرى، المشكلة هي حول مجموعات فرعية من الصفوف في عدة نماذج: العميل، مخزن، والموظفين، مدير

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


إذا كنت لا تستطيع ان تفعل ذلك مع النظام إذن جانغو، يجب إعادة النظر في حالات الاستخدام الخاص بك. على محمل الجد.

[واجهة جانغو-REST، ومع ذلك، هو وحشا آخر تماما، ويحتاج إلى بعض الرعاية والتغذية.]

ModelAdmin كائنات لها طرق has_add_permission، has_change_permission، has_delete_permission وqueryset والتي يمكن استخدامها لفرض أذونات حول ما يمكن للمستخدم تسجيل الدخول للمشاهدة وتعديل - يمكنك إنشاء فئة فرعية الذي يستخدم هذه لفرض مهما الأذونات التي تريد تنفيذ وتسجيل كل ما تبذلونه من النماذج مع admin التطبيق باستخدام فئة فرعية الخاص بك.

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

هل لديك على الإطلاق أن يكون القائم حول تطبيق admin؟ وجهات النظر الجنيسة و ModelForms يمكن أن تأخذ الرعاية من الكثير من بت مملة المشاركة في تنفيذ CRUD، لذلك يكون حذرين من الحصول على علقت أيضا حتى على تخصيص admin - انها تقريبا تقليد جانغو لبدء طريق الحصول على التعلق على التطبيق admin وما يمكن وما لا يمكن القيام به، في البداية كنت أفكر أبدا لديك لكتابة أي رمز مرة أخرى؛)

ومن جانغو 1.2 هناك دعم للحصول على أذونات على مستوى الصف، التي جانغو-الوصي يجعل بديهية جدا في التعامل معها.

قد ترغب أيضًا في إلقاء نظرة على تصحيح الأذونات التفصيلية:http://code.google.com/p/django-granular-permissions/

يضيف أذونات على مستوى الصف إلى نظام أذونات Django.

لقد وجدت للتو http://bitbucket.org/jezdez/django-authority/ ، يبدو واعداً.

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