Django:提示在一组用户之间隔离数据

时间:2012-04-18 10:44:38

标签: django multiple-databases django-users django-orm

我想构建一个Django应用程序,其中每个“用户组”可以看到不同的数据,因为它们使用不同的数据库。有没有最佳实践来实现这一目标?

E.g。 用户A,在记录后,查看并管理自己的数据,不可能看到其他数据。

我可以使用Django multi-db功能来定义几个dbs,并根据当前请求的用户创建一个automatic router指向正确的数据库(将auth_user保留在公共数据库上)。

作为最后的机会,我可以为每个组创建一个不同的应用程序文件夹(唯一的区别是数据库名称),但我更喜欢更智能的解决方案。

1 个答案:

答案 0 :(得分:1)

您可以考虑重复使用其中一个many per-object permission apps for django

另一种可能性是制作不同的设置文件。例如,settings_groupA.py:

from settings import *
DATABASES = ...

然后你可以使用管理命令,比如syncdb,或runserver等等......使用--settings选项:

--settings=SETTINGS   The Python path to a settings module, e.g.
                        "myproject.settings.main". If this isn't provided, the
                        DJANGO_SETTINGS_MODULE environment variable will be
                        used.

示例:

./manage.py syncdb --settings=settings_groupA
./manage.py runserver --settings=settings_groupA

每个用户使用一个数据库的好处是,您可以更轻松地保护代码,并让他们对django.contrib.admin提供本机支持,而不需要hack。但是,如果您无论如何都要在组内拥有每个对象的权限,那么您也可以直接寻找第一个解决方案。