Django中各种权限级别之间的差异

时间:2012-05-08 19:43:03

标签: django permissions system authentication

据我所知,django中有3个权限级别可供使用(无论是通过django本身还是使用第三方应用程序)。 1)基于模型的权限 2)基于对象的权限 3)基于行的许可

如果你告诉我这三个级别的权限系统之间的确切差异,那就太棒了。

1 个答案:

答案 0 :(得分:1)

不知道你从哪里得到这些信息,但它甚至不是远程正确的。 Django在技术上没有任何权限系统。 auth contrib应用程序添加了一个“权限”系统,但它是可选的,可以完全替换为其他内容。 admin应用(也是一个贡献包,可选)使用auth,所以如果您正在谈论Django管理员,或使用auth包与您自己的应用程序那我们就可以谈谈了。

auth中,您有User个,Group个和Permission个。 User以“超级用户”或“常规”用户风格进入,当您运行syncdb时,项目中的每个模型都会自动获得三个Permission {{1} }}:can_add,can_change和can_delete。标记为“超级用户”(auth)的INSTALLED_APPS可以对任何模型采取任何操作。其他用户需要明确分配User个。此外,is_superuser == True可能会为Permission分配Group,然后,分配给该Permission的任何User都会继承这些权限。

因此,用户无法对任何模型执行任何操作,某些或所有模型的添加,更改或删除功能的某种组合或完全访问权限可以对任何模型执行任何操作。在“实例”的意义上,没有“基于对象”权限的概念。您可以编辑模型的每个实例,也可以不编辑。也没有“基于行”许可的概念。无论如何,数据库表中的一行只是模型的一个实例。