Перезаписать разрешение Django и изменить auth_permission

Я хочу создавать разрешения в представлениях динамически, а не по умолчанию в моделях.

Я создаю основной класс с именем CreatorView.

from django.views.generic import View
from django.forms.models import modelform_factory
class CreatorView(View):
    model = None
    fields = None
    exclude = None
    form = None
    page_title = ''
    
    def create_form(self):
        default =dict()
        if self.fields == None:
            if self.exclude == None:
                default['fields'] = self.fields = self.model._meta.fileds
            else:
                default['exclude'] = self.exclude
        else:
            if self.exclude:
                raise Exception('error')
            default['fields'] = self.fields
             

        return modelform_factory(self.model,**default)
    def get(self,request,*args,**kwargs):
        return render('','base.html')
    def post(self,request,*args,**kwargs):
      ... and so on

основные URL-адреса:

urlpatterns = [
path('%s/%s' % (cls.model._meta.app_label, cls.__name__.lower()), cls.as_view(),
     name='%s/%s' % (cls.model._meta.app_label, cls.__name__.lower())) for cls
in CreatorView.__subclasses__()]

если я делаю наследование от CreatorView, тогда мой класс должен создать страницу, например:

class Login(CreatorView):
    model = Users
    """ my overwrite methods and actions """

class Configurations(CreatorView):
    model = Configure
    """ my overwrite methods and actions """

class Teachers(CreatorView):
    model = Teachers
    """ my overwrite methods and actions """

class Students(CreatorView):
    model = Students
    """ my overwrite methods and actions """

and so on

этот код создаст для меня четыре страницы, которые я хочу создать для модели table semi to django content_type:

id app_label page
1 myapp login
2 myapp configurations
3 myapp teachers
4 myapp students

Могу ли я изменить таблицу auth_permission в Django, чтобы сделать внешний ключ content_type из моего content_type? Если я могу, как предотвратить вставку разрешений по умолчанию и сделать мою вставку для разрешения по умолчанию?


person AlASAD WAIL    schedule 13.01.2021    source источник
comment
Вы можете использовать декораторы для аутентификации ваших представлений.   -  person Shiv    schedule 14.01.2021
comment
Да, вы правы, мне также нужно проверить разрешение.   -  person AlASAD WAIL    schedule 14.01.2021
comment
Декоратор может выполнять проверки разрешений.   -  person dacx    schedule 14.01.2021


Ответы (1)


Вы можете создать разрешения вручную в соответствии с документами здесь

from myapp.models import BlogPost
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get_for_model(BlogPost)
permission = Permission.objects.create(
    codename='can_publish',
    name='Can Publish Posts',
    content_type=content_type,
)

OR

Расширенная библиотека разрешений, которая позволяет системе разрешений на основе логики обрабатывать сложные разрешения в Django. здесь

person Shiv    schedule 14.01.2021
comment
Да, спасибо за ваше, я хочу предотвратить автоматическую вставку разрешения по умолчанию при миграции - person AlASAD WAIL; 14.01.2021
comment
Также, если я изменил auth_permission, чтобы сделать его внешний ключ из моей модели content_type, могу ли я вызвать проблемы. - person AlASAD WAIL; 14.01.2021