Django权限控制:如何让按钮对超级用户/Staff可见?
Django删除按钮权限控制修复方案
1. 修正模板判断逻辑
把原代码的条件改成帖子作者、超级用户或Staff用户任意满足其一即可显示删除按钮,修改后的模板代码如下:
{% if request.user == post.user or request.user.is_superuser or request.user.is_staff %} <div class="trash"> <a href="{% url 'delete' post.id %}"> <i class="fa fa-trash-o" style="color:#657786; font-size: 20px" aria-hidden="true"></i> </a> </div> {% endif %}
2. 确保request对象在模板中可用
如果修改后仍无效,检查项目settings.py里的模板配置,确认启用了request上下文处理器:
打开settings.py找到TEMPLATES项,确保'django.template.context_processors.request'在context_processors列表中,示例配置:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', # 必须存在这一行 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
3. 视图层添加权限二次验证
为避免前端绕过权限直接访问删除接口,在处理删除请求的视图函数里补充权限判断:
from django.shortcuts import get_object_or_404, redirect from django.contrib.auth.decorators import login_required from .models import Post @login_required def delete_post(request, post_id): post = get_object_or_404(Post, id=post_id) # 校验权限:仅作者、超级用户或Staff可删除 if request.user != post.user and not request.user.is_superuser and not request.user.is_staff: return redirect('post_list') if request.method == 'POST': post.delete() return redirect('post_list') return render(request, 'delete_confirm.html', {'post': post})
内容的提问来源于stack exchange,提问作者Vitor Lira
相关产品推荐
相关产品推荐

