我如何使用Django组和权限?
我了解基本的用户的东西。 我知道身份validation,login,创build帐户等,但现在我想工作组和权限。
django组/权限的文档在哪里? 这不是: http : //docs.djangoproject.com/en/dev/topics/auth/
我想你需要问的第一个问题是你需要什么权限以及什么types的权限。 我的意思是你想要模型还是对象。 澄清差异说你有一个模型车。 如果你想授予所有车辆的权限,那么模型级别是适当的,但是如果你想给每个车辆授予权限,你需要对象级别。 您可能需要这两个,这不是我们会看到的问题。
对于模型权限,Django主要处理这些… 对于每个模型,Django将以“appname.permissionname_modelname”的forms创build权限。 如果你有一个名为“司机”与汽车模型的应用程序,然后一个权限将是“drivers.delete_car”。 Django自动创build的权限是创build,更改和删除。 由于一些奇怪的原因,他们决定不包括从CRUD读取权限,你将不得不自己做这个。 请注意,由于某种原因,Django决定将CRUD的“更新”更改为“更改”。 要向模型添加更多的权限,请说读权限,使用Meta类:
class Car( models.Model ): # model stuff here class Meta: permissions = ( ( "read_car", "Can read Car" ), )
请注意,权限是一组元组,其中元组项是如上所述的权限和该权限的描述。 你不必遵循permname_modelname约定,但我通常坚持下去。
最后,要检查权限,可以使用has_perm:
obj.has_perm( 'drivers.read_car' )
其中obj是用户或组实例。 我认为这样写一个函数是比较简单的:
def has_model_permissions( entity, model, perms, app ): for p in perms: if not entity.has_perm( "%s.%s_%s" % ( app, p, model.__name__ ) ): return False return True
其中entity是检查(Group或User)权限的对象,Model是模型的实例,Perms是作为string进行检查的权限列表(例如['read','change']),app是应用程序名称作为string。 要做与上面的has_perm一样的检查,可以这样调用:
result = has_model_permissions( myuser, mycar, ['read'], 'drivers' )
如果你需要使用对象或行权限(它们意味着同样的事情),那么Django本身并不能真正帮助你。 好的是你可以同时使用模型和对象的权限。 如果你想获得对象权限,你必须自己编写 (如果使用1.2+),或者find其他人编写的项目,我喜欢的是从华盛顿时代开始的django-objectpermissions 。