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自带的权限系统。
上一篇: Django--权限Permissions的例子 - python
下一篇: 常见问题汇总