【问题标题】:How can I add automatically CRUD permissions to a django model inside the Meta class?如何自动将 CRUD 权限添加到 Meta 类中的 django 模型?
【发布时间】:2018-08-29 19:51:08
【问题描述】:

想象一下我有以下模型

class Post(models.Model):
    name = models.CharField(max_length=20)
    body = models.TextField()

    class Meta:
        permissions = permission_generator()

我想要的是permission_generator() 来生成元组

(
    ('create_pet', 'create post'),
    ('read_pet', 'read post'),
    ('update_pet', 'update post'),
    ('delete_post', 'delete post'),
)

以一种我可以在所有模型中重复使用的方式,而无需在每次定义新模型时重复自己。

如何实现这样的事情?

【问题讨论】:

  • 您可以在 Meta 中定义具有 CRUD 权限的抽象模型。

标签: django django-models permissions authorization django-guardian


【解决方案1】:

我刚刚发现django默认添加了

  • 添加型号名称
  • 更改型号名称
  • delete_modelname

https://docs.djangoproject.com/en/dev/topics/auth/default/#default-permissions

【讨论】:

    【解决方案2】:

    您可以创建抽象模型并继承它。例如:

    class BaseModel(models.Model):
        class Meta:
            abstract=True
            permissions = (
                ('create', 'Create'),
                ('read', 'Read'),
                ('update', 'Update'),
                ('delete', 'Delete')
            )
    
    class Cat(BaseModel):
        name = models.CharField()
    

    当您继承该模型并进行数据迁移时,这些权限将添加到 django_permissions 表中,如下所示:

    app | cat | Permission name

    【讨论】:

      猜你喜欢
      • 2023-04-08
      • 2013-09-09
      • 2011-12-05
      • 1970-01-01
      • 2018-10-09
      • 1970-01-01
      • 2023-03-21
      • 2020-02-07
      • 2012-05-02
      相关资源
      最近更新 更多