如何为Staff身份用户添加Driver删除权限?解决403权限错误
解决Django中Staff用户无法删除Driver对象的权限问题
当前问题是DriverDeleteView仅允许管理员删除Driver,Staff用户操作时触发403错误,核心原因是PermissionRequiredMixin默认仅检查指定权限,而Staff用户未被赋予对应权限或视图未对Staff身份做特殊放行。以下是两种可行解决方案:
方案一:给Staff用户/用户组分配对应权限
- 登录Django Admin后台,进入**用户组(Groups)**页面,编辑Staff组,在权限列表中勾选
taxi | driver | Can delete driver权限后保存。 - 若为单个Staff用户,直接编辑该用户,在权限模块添加
taxi.delete-driver权限。 - 此方案严格遵循Django原生权限体系,适合需要精细化权限管控的场景。
方案二:自定义视图的权限校验逻辑
如果业务需求是所有Staff用户默认拥有删除Driver的权限,无需单独分配权限,可重写PermissionRequiredMixin的has_permission方法:
class DriverDeleteView(LoginRequiredMixin, PermissionRequiredMixin, generic.DeleteView): model = Driver success_url = reverse_lazy("taxi:driver-list") permission_required = "taxi.delete-driver" def has_permission(self): user = self.request.user # 允许超级管理员、Staff用户,或拥有指定删除权限的用户 return user.is_superuser or user.is_staff or super().has_permission()
- 该逻辑优先判断用户是否为管理员或Staff,满足任一条件即可执行删除;否则再校验是否拥有
taxi.delete-driver权限。 - 此方案更灵活,适合需要快速给Staff开放权限的场景。
注意事项
- 确保
LoginRequiredMixin已生效,避免未登录用户访问删除接口。 - 使用方案一时,权限分配完成后建议让用户重新登录,确保权限生效。
内容的提问来源于stack exchange,提问作者Belskij Arioh
相关产品推荐
相关产品推荐

