通过Django Model在Postgres表上声明性地设置权限?

时间:2017-05-16 17:45:20

标签: python django postgresql django-models

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

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

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

    我们有两个角色:

    1. data_scientists_rw
    2. web_team_admin
    3. 我们不希望在每次迁移中手动编写GRANT和REVOKE权限,而是希望在模型上有一个装饰器或Meta类变量,这样当我们makemigrations时,它将自动生成正确的SQL。 / p>

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

      进行迁移:

      $ ./manage.py makemigrations
      

      自动生成的模型(伪代码):

      # migrations/0008_new_data_scientist_model.py
      ...
      if data_science_team_editable:
          RunSQL('GRANT INSERT, UPDATE, DELETE ON {tablename} TO data_scientists_rw;')
      ...
      

      问题:

      1. 这种方法看起来合情合理吗?
      2. 我如何挂钩makemigrations以便我可以自动生成RunSQL代码?

0 个答案:

没有答案