Django Admin的权限管理
Django Admin的权限管理提供了对系统中不同用户角色的访问权限的控制。
首先,需要在models.py文件中定义需要管理的Model类,并在admin.py文件中注册这些Model:
from django.contrib import admin from .models import Blog class BlogAdmin(admin.ModelAdmin): list_display = ('title', 'pub_date', 'author', 'is_published') admin.site.register(Blog, BlogAdmin)
这里我们定义了一个Blog类,并为该类定义了一个BlogAdmin类,在BlogAdmin类中指定了需要显示在列表中的字段。
然后,在admin.py文件中定义用户角色和权限:
from django.contrib.auth.models import Group, Permission # 定义用户角色 customer_group = Group.objects.create(name='Customer') publisher_group = Group.objects.create(name='Publisher') # 定义权限 customer_permissions = [ Permission.objects.get(codename='view_blog'), Permission.objects.get(codename='add_comment'), Permission.objects.get(codename='change_comment') ] publisher_permissions = [ Permission.objects.get(codename='add_blog'), Permission.objects.get(codename='change_blog') ] # 为角色赋予权限 customer_group.permissions.set(customer_permissions) publisher_group.permissions.set(publisher_permissions)
在这里,我们定义了两个角色:Customer和Publisher,并给它们分别分配了不同的权限。其中,我们使用了Permission和Group模型,这些模型是Django Admin自带的。我们使用了codename属性来获取每个权限的唯一标识符。
最后,在admin.py文件中,我们可以为每个Model类指定角色和权限:
from django.contrib.auth.decorators import permission_required from django.utils.decorators import method_decorator class BlogAdmin(admin.ModelAdmin): list_display = ('title', 'pub_date', 'author', 'is_published') @method_decorator(permission_required('blog.add_blog', raise_exception=True)) def add_view(self, request, form_url='', extra_context=None): return super().add_view(request, form_url, extra_context) @method_decorator(permission_required('blog.change_blog', raise_exception=True)) def change_view(self, request, object_id, form_url='', extra_context=None): return super().change_view(request, object_id, form_url, extra_context) @method_decorator(permission_required('blog.delete_blog', raise_exception=True)) def delete_view(self, request, object_id, extra_context=None): return super().delete_view(request, object_id, extra_context)
在这个例子中,我们使用了permission_required装饰器来限制用户角色和权限。这个装饰器会检查当前用户是否具有相应的权限,如果没有则会引发一个403 Forbidden错误。
更详细的Django Admin的权限管理请参考官方文档:https://docs.djangoproject.com/en/3.2/ref/contrib/admin/#django.contrib.admin.ModelAdmin.has_change_permission
相关文章