如何在Django中限制视图仅允许所属用户与超级管理员访问
解决方案
第一步:修改views.py逻辑(核心校验,必须放在服务端视图层才安全)
仅在HTML模板做权限限制很容易被绕过,需要先在视图层做服务端校验,修改后代码如下:
from django.http import HttpResponse @login_required def individual_sum(request, user_name_id): # 新增权限校验:仅超级管理员 或 ID和路径传入的user_name_id一致的登录用户可访问 if not (request.user.is_superuser or request.user.id == user_name_id): # 无权限时返回403状态+提示,也可以自定义渲染无权限页面 return HttpResponse("You are not able to view this page!", status=403) # 原有查询逻辑保留不变 ... lots of query context = { ... lots of contexts # 如果要在模板里继续做判断,可新增这个参数传入模板 # 'user_name_id': user_name_id } return render(request, 'stressz/individual_sum.html', context)
第二步:可选优化模板逻辑
因为视图层已经做了权限拦截,能进入页面的都是有权限用户,你可以直接删掉原模板里的if/else判断,直接渲染页面内容即可。如果需要保留双重校验,也可以修改模板的判断条件:
{% if request.user.is_superuser or request.user.id == user_name_id %} <div class="container text-justify p-5"> <div class="display-4 text-left text-primary my-3"> ... {% else %} You are not able to view this page! {% endif %}
内容的提问来源于stack exchange,提问作者RlM
相关产品推荐
相关产品推荐

