Django Admin的多用户支持和访问控制

2023-04-11 00:00:00 支持 访问控制 多用户

在Django中,可以通过用户和用户组进行访问控制。首先,需要在settings.py中配置认证和授权的引擎:

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend', # 默认的认证引擎
    'guardian.backends.ObjectPermissionBackend', # 引入guardian认证引擎
]

然后,需要安装guardian模块:

pip install django-guardian

接下来,就可以在models.py中定义相关的访问权限:

from django.db import models
from django.contrib.auth.models import User
from guardian.shortcuts import assign_perm

class Blog(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(User, related_name='blogs')

    def __str__(self):
        return self.title

class Comment(models.Model):
    content = models.TextField()
    author = models.ForeignKey(User)
    blog = models.ForeignKey(Blog, related_name='comments')

    def __str__(self):
        return self.content

# 给Blog添加访问权限,只有作者和管理员才能访问
assign_perm('view_blog', User.objects.filter(is_staff=True), Blog.objects.all())
assign_perm('view_blog', 'group:author', Blog.objects.all())

在admin.py中,需要使用自定义的ModelAdmin来实现访问控制:

from django.contrib import admin
from guardian.admin import GuardedModelAdmin
from .models import Blog, Comment

class BlogAdmin(GuardedModelAdmin):
    list_display = ('title', 'author')
    fieldsets = [
        (None, {'fields': ['title', 'content']}),
        ('作者', {'fields': ['author'], 'classes': ['collapse']}),
    ]

admin.site.register(Blog, BlogAdmin)
admin.site.register(Comment)

通过这种方法,可以实现多用户支持和访问控制,只有作者和管理员才能访问特定的Blog。

相关文章