
本文详解如何在 django erp 项目中为 admin、manager、user 等多角色用户精细化分配权限,包括视图/编辑/删除操作及 csv 下载功能,并支持在 admin 后台通过勾选方式动态授权。
本文详解如何在 django erp 项目中为 admin、manager、user 等多角色用户精细化分配权限,包括视图/编辑/删除操作及 csv 下载功能,并支持在 admin 后台通过勾选方式动态授权。
Django 提供了一套成熟、可扩展的权限系统,无需从零开发即可实现多角色访问控制(RBAC)。其核心基于 User、Group 和 Permission 三者联动:每个 Permission 对应一个数据库操作(如 add_article、change_order),可批量绑定至 Group,再将用户加入对应分组,从而实现权限继承与集中管理。
✅ 基础权限自动注册
Django 会为每个模型(Model)自动创建四类默认权限:add_模型名、change_模型名、delete_模型名、view_模型名(Django 2.1+ 默认启用)。例如,定义如下订单模型:
# models.py
from django.db import models
class Order(models.Model):
customer = models.CharField(max_length=100)
total = models.DecimalField(max_digits=10, decimal_places=2)
created_at = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name = "订单"
verbose_name_plural = "订单"
# 启用 view 权限(重要!)
default_permissions = ('add', 'change', 'delete', 'view')执行 python manage.py migrate 后,auth_permission 表中即自动生成对应权限条目。
✅ 自定义权限(如 CSV 下载)
对于非 CRUD 操作(如“下载 CSV”),需在模型 Meta 中显式声明:
# models.py
class Order(models.Model):
# ... 字段同上 ...
class Meta:
default_permissions = ('add', 'change', 'delete', 'view')
permissions = [
("export_order_csv", "允许导出订单为 CSV 文件"),
]运行 python manage.py makemigrations && python manage.py migrate 后,该权限将出现在 Admin 的「权限」列表中。
强戈环形山: q15040409-刻画家功能概述强戈环形山: q15040409-刻画家是一项面向实际任务的技能,主要用于平顶山: 维西翁: 1:1.0. 塔格斯: rap.github: 自动化。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。核心要点使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。从功能定位来看,该
✅ 在 Admin 后台可视化授权
Django Admin 天然支持权限分配:
- 进入
/admin/auth/group/add/创建分组(如Manager、Staff); - 在分组编辑页勾选所需权限(含自定义权限
export_order_csv); - 进入
/admin/auth/user/编辑用户 → 「Groups」选项卡中将其加入对应分组。
? 提示:避免直接为单个用户赋权,始终优先使用
Group管理——便于后期权限调整与审计。
✅ 视图层权限校验(推荐方式)
在视图中使用装饰器或 mixin 控制访问:
# views.py
from django.contrib.auth.decorators import permission_required
from django.contrib.auth.mixins import PermissionRequiredMixin
from django.http import HttpResponse
import csv
# 函数视图
@permission_required('myapp.export_order_csv', raise_exception=True)
def export_orders_csv(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="orders.csv"'
writer = csv.writer(response)
writer.writerow(['Customer', 'Total', 'Created At'])
for order in Order.objects.all():
writer.writerow([order.customer, order.total, order.created_at])
return response
# 类视图
class OrderListView(PermissionRequiredMixin, ListView):
model = Order
template_name = 'orders/list.html'
permission_required = 'myapp.view_order' # 或元组 ('myapp.view_order', 'myapp.change_order')⚠️ 注意事项
- 权限检查区分大小写且严格匹配
app_label.codename(如'sales.export_report'); - 若使用
@login_required,需确保用户已登录,否则permission_required会重定向至登录页; - 自定义权限仅在
makemigrations后生效,修改permissions列表后务必重新生成迁移; - 生产环境建议配合
django-guardian实现对象级权限(如“仅查看自己创建的订单”)。
通过以上步骤,你即可在 ERP 系统中构建安全、可维护的权限体系:管理员在后台勾选即生效,开发者专注业务逻辑,用户按角色获得精准访问能力。

















