在Django管理中添加对象级权限可以通过以下步骤实现:
Post
的模型,其中包含title
、content
和author
字段,我们希望只有作者本人才能编辑和删除自己的帖子。from django.db import models
from django.contrib.auth.models import User
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
django.contrib.auth.models.Permission
模型来定义权限,然后使用django.contrib.auth.models.User
模型的user_permissions
字段来分配权限。我们可以创建一个自定义的权限验证类,继承自django.contrib.auth.models.Permission
,并添加一些额外的逻辑来验证对象级权限。from django.contrib.auth.models import Permission
class ObjectPermission(Permission):
def has_object_permission(self, user, obj):
# 在这里添加自定义的对象级权限验证逻辑
return user == obj.author
get_queryset
方法来实现。from django.contrib import admin
class PostAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super().get_queryset(request)
if request.user.is_superuser:
return qs
return qs.filter(author=request.user)
admin.site.register(Post, PostAdmin)
django.contrib.auth.decorators.permission_required
装饰器来实现。from django.contrib.auth.decorators import permission_required
from django.shortcuts import get_object_or_404, render
@permission_required('app.change_post', (Post, 'id', 'post_id'))
def edit_post(request, post_id):
post = get_object_or_404(Post, id=post_id)
# 编辑帖子的逻辑
return render(request, 'edit_post.html', {'post': post})
通过以上步骤,我们成功地在Django管理中添加了对象级权限。只有作者本人才能编辑和删除自己的帖子,其他用户将无法进行这些操作。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云