Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过Django模型声明性地设置Postgres表的权限?_Python_Django_Postgresql_Django Models - Fatal编程技术网

Python 通过Django模型声明性地设置Postgres表的权限?

Python 通过Django模型声明性地设置Postgres表的权限?,python,django,postgresql,django-models,Python,Django,Postgresql,Django Models,我们有两个不同的小组在同一个Django数据库上工作: 网络团队 一组数据科学家 我们希望让数据科学家能够轻松地使用Django模型读取/写入表的子集,但不允许他们对其余表进行写入/删除访问 我们目前的想法是,我们希望使用GRANT和REVOKE样式的SQL语句锁定数据层(Postgres)中的表,但我们希望在模型中管理这些权限 我们有两个角色: 数据\u科学家\u rw web\u团队管理 我们不希望在每次迁移中手动写入GRANT和REVOKE权限,而是希望在模型上有一个装饰器或一个元类变量,

我们有两个不同的小组在同一个Django数据库上工作:

  • 网络团队
  • 一组数据科学家
  • 我们希望让数据科学家能够轻松地使用Django模型读取/写入表的子集,但不允许他们对其余表进行写入/删除访问

    我们目前的想法是,我们希望使用GRANT和REVOKE样式的SQL语句锁定数据层(Postgres)中的表,但我们希望在模型中管理这些权限

    我们有两个角色:

  • 数据\u科学家\u rw
  • web\u团队管理
  • 我们不希望在每次迁移中手动写入GRANT和REVOKE权限,而是希望在模型上有一个装饰器或一个元类变量,这样当我们
    进行迁移时,它将自动生成正确的SQL

    # data_scientists/models.py (pseudocode)
    class DataScientistModel(models.Model):
        ...
        my_special_number = models.FloatField()
        ...
        class Meta:
            data_science_team_editable = True
    
    进行迁移:

    $ ./manage.py makemigrations
    
    自动生成的模型(伪代码):

    问题:

  • 这种做法是否明智
  • 我如何钩住
    makemigrations
    ,以便自动生成RunSQL代码
  • # migrations/0008_new_data_scientist_model.py
    ...
    if data_science_team_editable:
        RunSQL('GRANT INSERT, UPDATE, DELETE ON {tablename} TO data_scientists_rw;')
    ...