Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Django组和权限是硬编码还是引导?_Django_Permissions_Bootstrapping_Usergroups - Fatal编程技术网

Django组和权限是硬编码还是引导?

Django组和权限是硬编码还是引导?,django,permissions,bootstrapping,usergroups,Django,Permissions,Bootstrapping,Usergroups,我正在构建一个应用程序,该应用程序假定其工作流存在特定的组和权限。例如,“会员”可以登录应用程序并查看和编辑其个人数据,但无法查看通常显示在同一屏幕上的注释。“员工”可以查看这些笔记并创建或编辑自己的笔记,但只有“会员经理”可以删除或编辑任何人的笔记 我的问题是如何引导此应用程序的数据。我可以为组创建JSON fixture数据,但随后我必须硬编码PKs,这似乎是一种不好的做法(如果我想使用的第三方应用程序做了同样的事情,并且出现了冲突怎么办?)更大的问题是权限-我必须将PKs添加到权限中,而这

我正在构建一个应用程序,该应用程序假定其工作流存在特定的组和权限。例如,“会员”可以登录应用程序并查看和编辑其个人数据,但无法查看通常显示在同一屏幕上的注释。“员工”可以查看这些笔记并创建或编辑自己的笔记,但只有“会员经理”可以删除或编辑任何人的笔记

我的问题是如何引导此应用程序的数据。我可以为组创建JSON fixture数据,但随后我必须硬编码PKs,这似乎是一种不好的做法(如果我想使用的第三方应用程序做了同样的事情,并且出现了冲突怎么办?)更大的问题是权限-我必须将PKs添加到权限中,而这些权限反过来又会将PKs添加到其内容类型中


我读过关于使用post_syncdb钩子以更编程的方式添加初始数据的文章,我希望这能帮助我解决硬编码的PK问题。但我想知道这是否是这个问题的最佳解决方案,或者如果我在这里“滥用”Django组和权限概念,并且应该做其他事情,比如创建新模型或只是在我的用户配置文件模型上添加标志(如“is_成员\ U管理器”),等。

通常创建一个名为
init
的应用程序,使用管理命令
initialize
,我将所有代码放在那里以引导应用程序。这允许您:

  • 如果您使用部署工具(我使用[Ansible](,bat可以是amy tool Fabric,bash…),您可以自动执行此过程,并在设置(首次安装)后从已安装的应用程序中删除
    init
    应用程序

  • 检查是否已启动该命令以跳过该过程(
    Group.objects.all().exists()
    ?)
(或两者兼有)

我发现这个解决方案很容易维护,并且在任何情况下都足够强大

post\u-syncdb
djang 1.7中的post\u-migrate
)并不是每次迁移都需要的解决方案

如果您只需要加载数据和/或创建记录(即组/管理员…),最好的解决方案是使用IMHO 数据迁移]()