欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

django自定义权限(permissions)

程序员文章站 2022-07-12 10:34:28
...

有时django创建的4种可选权限(view、add、change、delete)满足不了我们的要求,这时我们需要自定义权限。实现方法主要有两种。我现在有个Article文章模型,下面我们将分别使用2种方法给Article模型新增了两个权限,一个是publish_article, 一个是comment_article。

 

方法1. 在Model的meta属性中添加permissions。

class Article(models.Model):
    ...
    class Meta:
        permissions = (
            ("publish_article", "Can publish article"),
            ("comment_article", "Can comment article"),
        )


方法2. 使用ContentType程序化创建permissions。

from blog.models import Article
from django.contrib.auth.models import Permission
from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get_for_model(article)
permission1 = Permission.objects.create(
    codename='publish_article',
    name='Can publish articles',
    content_type=content_type,
)

permission2 = Permission.objects.create(
    codename='comment_article',
    name='Can comment articles',
    content_type=content_type,
)


当你使用python manage.py migrate命令后,你会发现Django admin的user permissions栏又多了两个可选权限。

那么怎么利用这两个新加的权限呢,你可以在代码中给某个用户或者组添加这个权限,置于代码怎么写请自行百度吧。其次你还可以在后台直接管理用户和组权限。

这样在视图或者有需要的地方,通过判断当前用户是否具有publish_article权限来决定用户能否发表文章了。

 

 

 

Django自带的权限机制是针对模型的,这就意味着一个用户如果对Article模型有change的权限,那么该用户获得对所有文章对象进行修改的权限。如果我们希望实现对单个文章对象的权限管理,我们需要借助于第三方库比如django guardian。或者在代码中扩充django自带的权限系统。