我了解基本的用户资料。我知道身份验证,登录,创建帐户等,但现在我想工作的组和权限。如何使用Django组和权限?
django groups/permissions的文档在哪里?这不是:http://docs.djangoproject.com/en/dev/topics/auth/
我了解基本的用户资料。我知道身份验证,登录,创建帐户等,但现在我想工作的组和权限。如何使用Django组和权限?
django groups/permissions的文档在哪里?这不是:http://docs.djangoproject.com/en/dev/topics/auth/
我想你需要问的第一个问题是你需要什么权限以及什么类型。我的意思是你想要模型还是对象级别。为了弄清楚差异,说你有一辆车。如果你想授予所有车辆的权限,那么模型级别是适当的,但如果你想在每辆车的基础上给予权限,你需要对象级别。您可能需要两者,而这不是我们将要看到的问题。
对于模型权限,Django为您处理这些...大部分。对于每个模型,Django都将以'appname.permissionname_modelname'的形式创建权限。如果您的汽车模型中有一个名为'drivers'的应用,那么其中一个权限就是'drivers.delete_car'。 Django自动创建的权限将是创建,更改和删除。由于一些奇怪的原因,他们决定不包含来自CRUD的读取权限,您将不得不自己做这件事。请注意,由于某种原因,Django决定将CRUD的“更新”更改为“更改”。要添加更多的权限模型,说读权限,您可以使用元类:
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
如果实体是检查(组或用户)权限的对象,模型是模型的实例,烫发是权限字符串列表来检查(例如['read','change']),app是作为字符串的应用程序名称。做同样的支票has_perm上面你会打电话来是这样的:
result = has_model_permissions(myuser, mycar, ['read'], 'drivers')
如果您需要使用对象或行权限(它们意味着同样的事情),那么Django的不能真正帮助你本身。好的是你可以同时使用模型和对象权限。如果你想获得对象权限,你将不得不write your own(如果使用1.2+)或找到其他人写的项目,我喜欢从washingtontimes的django-objectpermissions。
这是一个很好的权限答案,但几乎没有触及组,以及它们如何在Django中工作? – Simon 2013-07-22 22:53:09