初始提交:企业级日报系统完整代码
功能特性: - JWT用户认证系统 - 日报CRUD管理 - 三级权限控制 - 多维度搜索过滤 - 统计分析功能 - 评论互动系统 - 响应式Cool Admin界面 - 暗色主题支持 技术栈: - 后端:Django 4.2.7 + DRF + SimpleJWT - 前端:Vue 3 + Element Plus + Pinia - 数据库:SQLite/PostgreSQL - 部署:Docker + Nginx 包含内容: - 完整的后端API代码 - 现代化前端界面 - 数据库迁移文件 - 部署脚本和文档 - 演示页面和测试工具
This commit is contained in:
65
backend/daily_report/permissions.py
Normal file
65
backend/daily_report/permissions.py
Normal file
@@ -0,0 +1,65 @@
|
||||
from rest_framework import permissions
|
||||
|
||||
|
||||
class IsOwnerOrStaff(permissions.BasePermission):
|
||||
"""
|
||||
自定义权限:只有日报的创建者或管理员才能访问
|
||||
"""
|
||||
|
||||
def has_object_permission(self, request, view, obj):
|
||||
# 读取权限:管理员可以查看所有日报,普通用户只能查看自己的日报
|
||||
if request.method in permissions.SAFE_METHODS:
|
||||
return obj.user == request.user or request.user.is_staff
|
||||
|
||||
# 写入权限:只有创建者或管理员可以修改/删除
|
||||
return obj.user == request.user or request.user.is_staff
|
||||
|
||||
|
||||
class IsOwnerOrStaffReadOnly(permissions.BasePermission):
|
||||
"""
|
||||
自定义权限:管理员可以查看所有日报,普通用户只能查看自己的日报
|
||||
管理员对他人日报只有只读权限
|
||||
"""
|
||||
|
||||
def has_object_permission(self, request, view, obj):
|
||||
# 如果是日报创建者,拥有完全权限
|
||||
if obj.user == request.user:
|
||||
return True
|
||||
|
||||
# 如果是管理员,只有读取权限
|
||||
if request.user.is_staff:
|
||||
return request.method in permissions.SAFE_METHODS
|
||||
|
||||
# 其他情况拒绝访问
|
||||
return False
|
||||
|
||||
|
||||
class IsCommentOwnerOrStaff(permissions.BasePermission):
|
||||
"""
|
||||
评论权限:只有评论创建者或管理员可以修改/删除评论
|
||||
"""
|
||||
|
||||
def has_object_permission(self, request, view, obj):
|
||||
# 读取权限:所有认证用户都可以查看评论
|
||||
if request.method in permissions.SAFE_METHODS:
|
||||
return True
|
||||
|
||||
# 写入权限:只有评论创建者或管理员可以修改/删除
|
||||
return obj.user == request.user or request.user.is_staff
|
||||
|
||||
|
||||
class CanViewReports(permissions.BasePermission):
|
||||
"""
|
||||
日报查看权限:管理员可以查看所有日报,普通用户只能查看自己的日报
|
||||
"""
|
||||
|
||||
def has_permission(self, request, view):
|
||||
return request.user and request.user.is_authenticated
|
||||
|
||||
def has_object_permission(self, request, view, obj):
|
||||
# 管理员可以查看所有日报
|
||||
if request.user.is_staff:
|
||||
return True
|
||||
|
||||
# 普通用户只能查看自己的日报
|
||||
return obj.user == request.user
|
Reference in New Issue
Block a user