栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Django组和权限?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Django组和权限?

我想您需要问的第一个问题是您需要什么权限以及什么样的权限。我说的是哪种类型,您想要模型级别还是对象级别。为了澄清差异,假设您有一辆Car模型车。如果要授予所有汽车的权限,则“模型”级别是合适的,但是如果要按汽车授予权限,则需要“对象”级别。您可能同时需要这两个,这不是问题,我们将看到。

对于模型权限,Django主要为您处理这些权限。Django将为每个模型以“
appname.permissionname_modelname”形式创建权限。如果您有一个带有Car模型的名为“
drivers”的应用程序,则一个权限为“
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是User或Group实例。我认为为此编写一个函数更简单:

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本身并不能真正为您提供帮助。令人高兴的是,您可以同时使用模型和对象权限。如果您想要对象权限,则必须自己编写(如果使用1.2+)或找到其他人编写的项目,我喜欢的一个是华盛顿时间的django-
objectpermissions。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/645580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号