TIM*_*MEX 79 python django django-permissions
我理解基本的用户资料.我知道身份验证,登录,创建帐户等.但现在我想处理组和权限.
django组/权限的文档在哪里?这不是它:http://docs.djangoproject.com/en/dev/topics/auth/
Ale*_*uhl 117
我想你需要问的第一个问题是你需要什么权限以及什么类型的权限.通过什么类型,我的意思是你想要模型或对象级别.澄清差异说你有一个模型车.如果您想要授予所有汽车的权限,那么模型级别是合适的,但如果您想要基于每个汽车授予权限,则需要对象级别.您可能需要两者,这不是问题,我们会看到.
对于模型权限,Django主要为您处理这些问题.对于每个模型,Django将以"appname.permissionname_modelname"的形式创建权限.如果您有一个名为'drivers'的应用程序与Car模型,那么一个权限将是'drivers.delete_car'.Django自动创建的权限将是创建,更改和删除.由于某些奇怪的原因,他们决定不包括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
如果实体是检查(组或用户)权限的对象,则model是模型的实例,perms是要检查的字符串的权限列表(例如['read','change']),app是应用程序名称作为字符串.要像上面的has_perm一样进行检查,你可以这样调用:
result = has_model_permissions( myuser, mycar, ['read'], 'drivers' )
如果你需要使用对象或行权限(它们意味着相同的东西),那么Django本身并不能真正帮助你.好处是你可以并排使用模型和对象权限.如果你想要对象权限,你必须自己编写(如果使用1.2+)或找到别人写的项目,我喜欢的是来自华盛顿时代的django-objectpermissions.
| 归档时间: | 
 | 
| 查看次数: | 40574 次 | 
| 最近记录: |