覆盖 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,**kwargs):
      ... and so on

主要网址是:

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

代码将为我创建四个页面 我想将半表创建为 django content_type 模型,如下所示:

id app_label 页面
1 我的应用 登录
2 我的应用 配置
3 我的应用 老师
4 我的应用 学生

我可以修改 Django 中的 auth_permission 表以从我的 content_type 生成 content_type 外键吗? 如果我可以如何防止插入认权限并使我的插入获得认权限?

解决方法

您可以根据文档here

手动创建权限
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,)

一个增强的权限库,它使基于逻辑的权限系统能够处理 Django 中的复杂权限。 here