اذهب إلى المحتوى
  • 0

كيف يمكن تحديد صلاحيات مستخدمي Django لحقول النماذج؟

Ebrahim Abdo2

السؤال

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

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

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

وإذا كان سؤال غير متعلق، فإليك الشرح.

تستطيع إخفاء بعض الحقول والنماذج عن المستخدمين الجدد في Django باستخدام الصلاحيات (Permissions) وعرض الحقول والنماذج المطلوبة فقط للمستخدمين الذين لديهم هذه الصلاحيات. وبإمكانك تحقيق ذلك باستخدام مجموعات المستخدمين (Groups) والصلاحيات المخصصة لكل مجموعة.

ففي Django، بإمكانك الاستفادة من نمط الصلاحيات المدمج في الإطار (Built-in permission system) لإنشاء صلاحيات مخصصة لمجموعات المستخدمين الخاصة بك، ويمكنك إنشاء مجموعة جديدة للمستخدمين الذين لديهم الصلاحية المطلوبة لرؤية وتحرير حقول ونماذج معينة.

وتحديد صلاحيات لكل نموذج (Model) وحقل (Field) في Django باستخدام خاصية الصلاحيات (Permissions) المدمجة في النموذج، باستخدام الدالة Meta الموجودة في كل نموذج في Django، ومن خلال تعيين الصلاحيات للمجموعات المناسبة ، تستطيع تحديد الحقول والنماذج التي يمكن للمستخدمين الجدد الوصول إليها والتي يمكن للمستخدمين المحددين الوصول إليها.

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

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

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

مثالًا بسيطًا باستخدام Meta و Permissions لإضافة صلاحيات لحقل معين.

لنفترض أن لدينا نموذج لـ المقالات (Articles) في مدونة، ونريد فقط السماح للمستخدمين المحددين ( المسؤولين فقط) بتحرير حقل تاريخ النشر (Publish Date).

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

في ملف models.py، يمكننا تحديد الصلاحيات باستخدام Meta و Permissions على النحو التالي:

from django.db import models
from django.contrib.auth.models import Group, Permission

class Article(models.Model):
    title = models.CharField(max_length=200)
    publish_date = models.DateTimeField(auto_now_add=True)

    class Meta:
        permissions = [
            ("can_edit_publish_date", "Can edit the publish date"),
        ]
    
    def __str__(self):
        return self.title

نقوم بتحديد الصلاحية can_edit_publish_date ووصفها "Can edit the publish date" في القائمة permissions، وهذا يتيح لنا استخدام هذه الصلاحية لتعيينها لمجموعة محددة في وقت لاحق.

الآن، عليك بإنشاء مجموعة جديدة باسم Editors ونعين الصلاحية التي قمنا بتعريفها في Meta لهذه المجموعة باستخدام Permission.objects.get():

from django.contrib.auth.models import Group, Permission

editors_group, created = Group.objects.get_or_create(name='Editors')
can_edit_publish_date = Permission.objects.get(codename='can_edit_publish_date')
editors_group.permissions.add(can_edit_publish_date)

نستخدم get_or_create() لإنشاء مجموعة جديدة إذا لم تكن موجودة بالفعل.

ثم، نستخدم get() للعثور على الصلاحية التي قمنا بتعريفها سابقًا باستخدام اسم الصلاحية codename.

وأخيرًا، نستخدم permissions.add() لإضافة الصلاحية.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

 

بتاريخ 8 دقائق مضت قال عمر قره محمد:

هل يمكنك ايضاح سؤالك بشكل افضل؟ أو قم بالتعليق اسفل الدرس الذي تتابعه إذا كنت تتحدث عن درس محدد.

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

٢٠٢٣٠٥٠٣_١٣٤٧٢٧.jpg

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 3‏/5‏/2023 at 13:51 قال Ebrahim Abdo2:

 

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

 

مثال بسيط يوضح كيفية تحديد الصلاحيات المتاحة للمستخدمين في Django باستخدام ModelAdmin.

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

في ModelAdmin، يمكنك تحديد الصلاحيات المتاحة لكل مستخدم عن طريق تحديد الحقول التي يمكن للمستخدمين الجدد الوصول إليها والتحرير، وتحديد الحقول التي يمكن للمستخدمين المحددين الوصول إليها والتحرير.

يمكنك تحديد صلاحية القراءة والعرض لجميع المستخدمين لحقلي title و description في Project ModelAdmin عن طريق إضافة الحقلين إلى fields:

from django.contrib import admin
from myapp.models import Project

class ProjectAdmin(admin.ModelAdmin):
    fields = ('title', 'description')

admin.site.register(Project, ProjectAdmin)

ولكن، إذا أردت تحديد الصلاحيات للمستخدمين المحددين لصلاحية التعديل والحذف لحقل الصورة (image)، يمكنك استخدام الخيارات التالية:

readonly_fields: يمكنك استخدامه لتعيين حقل الصورة (image) كحقل للقراءة فقط للمستخدمين الجدد وتركه قابلًا للتحرير للمستخدمين المحددين.

fields: يمكنك استخدامه لتحديد الحقول التي يمكن للمستخدمين المحددين الوصول إليها والتحرير، مثل حقل الصورة (image).

exclude: يمكنك استخدامه لاستثناء حقل الصورة (image) من عرضه في إدارة الموقع بشكل عام والتحكم به عن طريق الصلاحيات المحددة في ModelAdmin.

في هذا المثال، سنستخدم readonly_fields لتعيين حقل الصورة كحقل للقراءة فقط للمستخدمين الجدد وسنستخدم fields لتحديد حقل الصورة والتحكم به عند المستخدمين المحددين:

from django.contrib import admin
from myapp.models import Project

class ProjectAdmin(admin.ModelAdmin):
    fields = ('title', 'description')
    readonly_fields = ('image',)

    def get_readonly_fields(self, request, obj=None):
        readonly_fields = super().get_readonly_fields(request, obj=obj)
        if not request.user.is_superuser:
            return readonly_fields + ('image',)
        return readonly_fields

admin.site.register(Project, ProjectAdmin)

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

هذا هو مثال بسيط على كيفية تحديد الصلاحيات المتاحة للمستخدمين في Django باستخدام ModelAdmin و Django's Model Permissions. يمكنك تطبيق نفس المفهوم لأي عدد من الحقول في النموذج الخاص بك.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...