Django:什么是权限代号?

时间:2015-12-18 18:17:00

标签: python django

我正在尝试在我的Django应用中设置权限装饰器。文档提到它,我无处可以找到解释这个codename代表什么(模型字段?模型方法?权限方法?)。

代号是什么?在哪里可以设置代号?

https://docs.djangoproject.com/en/1.9/topics/auth/default/#the-permission-required-decorator

1 个答案:

答案 0 :(得分:7)

您可以为Meta类下的任何模型添加自定义权限。这些权限名称称为codename。它是这样的:

class Dish(models.Model):
    name = models.CharField()
    class Meta:
        permissions = (
            ('can_approve_dish', "Can approve Dish publication"),
            ('can_delete_dish', "Can Delete Dish")
        )

此处,can_approve_dish代号。现在,要对Dish执行任何操作,您可以检查以下权限:

# Assuming Dish model is under app named - `'app'`
if user.has_perm('app.can_delete_dish'):
    dish.delete()

管理站点上可以使用这些权限,以便在迁移后分配给用户。因此,如果您尚未向用户分配can_delete_dish权限,则他无法删除该菜肴。

如果您在名为app的应用下的多个模型上添加了不同的权限,则所有这些权限都将在名称app下。这意味着,您可以在同一个应用中的模型之间拥有唯一的代号。