feat: cms users institution department manager

This commit is contained in:
2026-06-11 10:37:29 +08:00
parent 1dc9141856
commit 32915bc6b4
39 changed files with 2403 additions and 75 deletions
View File
+7
View File
@@ -0,0 +1,7 @@
from django.apps import AppConfig
class CmsConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'apps.cms'
verbose_name = 'CMS 管理端'
+50
View File
@@ -0,0 +1,50 @@
from rest_framework.permissions import BasePermission
from config.exceptions import AppError
class IsSuperAdmin(BasePermission):
"""仅超级管理员可访问(role_type=super_admin 或 Django is_superuser)。
超管拥有全部 CMS 功能权限且不受机构隔离限制。
"""
def has_permission(self, request, view):
user = request.user
if user and user.is_authenticated and (
getattr(user, 'role_type', '') == 'super_admin' or user.is_superuser
):
return True
raise AppError('CMS_PERMISSION_DENIED', '仅超级管理员可访问该接口', status_code=403)
def is_super(user):
return getattr(user, 'role_type', '') == 'super_admin' or getattr(user, 'is_superuser', False)
class IsSuperOrHospitalAdmin(BasePermission):
"""超级管理员(全平台)或医院管理员(仅本院)可访问。
具体的数据范围(本院过滤、角色限制)由各 ViewSet 的 get_queryset / 序列化器实现。
"""
def has_permission(self, request, view):
user = request.user
if user and user.is_authenticated and (
is_super(user) or getattr(user, 'role_type', '') == 'hospital_admin'
):
return True
raise AppError('CMS_PERMISSION_DENIED', '需要超级管理员或医院管理员权限', status_code=403)
class IsTeacher(BasePermission):
"""仅带教医生(role_type=doctor)可访问。
数据范围(名下学生)由 ViewSet 的 get_queryset 通过师生关系收口。
"""
def has_permission(self, request, view):
user = request.user
if user and user.is_authenticated and getattr(user, 'role_type', '') == 'doctor':
return True
raise AppError('CMS_PERMISSION_DENIED', '仅带教医生可访问该接口', status_code=403)
+8
View File
@@ -0,0 +1,8 @@
from django.urls import path, include
# apps/cms 是 CMS 薄壳:聚合各领域 app 的 /api/cms/ 路由 + 未来的跨领域看板。
# 机构管理已迁至 organization 域(apps/organization),在此聚合。
urlpatterns = [
path('', include('apps.organization.urls')), # 机构、科室
path('', include('apps.user.cms_urls')), # 用户
]