You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:15:39