Django Admin的多用户支持和访问控制
在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。
相关文章