我们有两个不同的小组在同一个Django数据库上工作:
我们希望数据科学家能够轻松地使用Django模型读取/写入表的子集,但不允许他们对其余表进行写/删除访问。
我们目前的想法是,我们希望使用GRANT和REVOKE样式的SQL语句锁定数据层(Postgres)中的表,但我们希望在模型中管理这些权限。
我们有两个角色:
data_scientists_rw
web_team_admin
我们不希望在每次迁移中手动编写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;')
...
问题:
makemigrations
以便我可以自动生成RunSQL代码?