我理解基本的用户知识。我知道身份验证、登录、创建帐户等,但现在我想处理组和权限。
django组/权限的文档在哪里?不是这样的:http://docs.djangoproject.com/en/dev/topics/auth/
发布于 2011-01-25 01:19:15
我想你需要问的第一个问题是你需要什么权限和哪种权限。我的意思是,你想要模型级还是对象级。为了弄清楚区别,假设你有一辆模型车。如果您想在所有汽车上授予权限,那么Model-level是合适的,但如果您希望在每个汽车的基础上授予权限,则需要对象级别。您可能两者都需要,正如我们将看到的,这不是问题。
对于模型权限,Django会为您处理这些权限...多半是。对于每个模型,Django将以'appname.permissionname_modelname‘的形式创建权限。如果你有一个名为'drivers‘的应用程序和汽车型号,那么一个权限将是'drivers.delete_ Car’。Django自动创建的权限包括创建、更改和删除。出于某种奇怪的原因,他们决定不包含CRUD的读取权限,您将不得不自己执行此操作。请注意,Django出于某种原因决定将CRUD的“update”更改为“change”。要向模型添加更多权限,例如读取权限,可以使用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是要检查权限的对象(组或用户),model是模型的实例,perms是要检查的字符串形式的权限列表(例如,'read','change'),app是字符串形式的应用程序名称。要执行与上面的has_perm相同的检查,您可以调用类似下面的代码:
result = has_model_permissions( myuser, mycar, ['read'], 'drivers' )
如果您需要使用对象或行权限(它们的含义相同),那么Django本身并不能真正帮助您。好的是你可以同时使用模型权限和对象权限。如果你想要对象权限,你必须要么使用write your own (如果使用1.2+),要么找到别人写的项目,我喜欢的一个是来自华盛顿时报的django-objectpermissions。
https://stackoverflow.com/questions/4778685
复制相似问题