feat:cms relation hospital bug fix
This commit is contained in:
@@ -11,7 +11,7 @@ from drf_spectacular.utils import extend_schema, extend_schema_view
|
||||
|
||||
from config.exceptions import AppError
|
||||
from apps.user.models import Institution, Department
|
||||
from apps.cms.permissions import IsSuperAdmin
|
||||
from apps.cms.permissions import IsSuperAdmin, IsSuperOrHospitalAdmin, is_super
|
||||
from apps.common.excel import xlsx_response, rows_from_xlsx
|
||||
from .serializers import CmsInstitutionSerializer, CmsDepartmentSerializer
|
||||
|
||||
@@ -50,11 +50,25 @@ class CmsInstitutionViewSet(viewsets.ModelViewSet):
|
||||
# 仅 GET / POST:查=GET,增删改=POST(编辑→{id}/update/,停用→{id}/disable/)
|
||||
http_method_names = ['get', 'post', 'head', 'options']
|
||||
|
||||
def get_permissions(self):
|
||||
# 编辑机构 / 上传 Banner:超管 + 医院管理员(医院管理员仅限本院,在动作内收口);
|
||||
# 其余动作(列表/新增/停用/导入导出等)仍仅超级管理员。
|
||||
if getattr(self, 'action', None) in ('update_inst', 'banner'):
|
||||
return [IsAuthenticated(), IsSuperOrHospitalAdmin()]
|
||||
return [IsAuthenticated(), IsSuperAdmin()]
|
||||
|
||||
@extend_schema(summary='CMS-INST-3 编辑机构', tags=['CMS-机构'])
|
||||
@action(detail=True, methods=['post'], url_path='update')
|
||||
def update_inst(self, request, pk=None):
|
||||
"""编辑机构(POST 局部更新,等价旧 PATCH /{id}/)。"""
|
||||
"""编辑机构(POST 局部更新,等价旧 PATCH /{id}/)。
|
||||
|
||||
- 超级管理员:可编辑任意机构。
|
||||
- 医院管理员:仅能编辑**本院**机构(非本院 → 403),可改除机构 ID 外的信息;
|
||||
不能停用/删除机构(停用动作仍仅超管)。
|
||||
"""
|
||||
instance = self.get_object()
|
||||
if not is_super(request.user) and instance.id != request.user.institution_id:
|
||||
raise AppError('CMS_PERMISSION_DENIED', '医院管理员只能修改本机构信息', status_code=403)
|
||||
serializer = self.get_serializer(instance, data=request.data, partial=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
@@ -71,8 +85,14 @@ class CmsInstitutionViewSet(viewsets.ModelViewSet):
|
||||
@action(detail=True, methods=['post'], url_path='banner',
|
||||
parser_classes=[MultiPartParser, FormParser])
|
||||
def banner(self, request, pk=None):
|
||||
"""上传机构 Banner 图(multipart/form-data,字段名 file)。"""
|
||||
"""上传机构 Banner 图(multipart/form-data,字段名 file)。
|
||||
|
||||
- 超级管理员:可为任意机构上传。
|
||||
- 医院管理员:仅可为**本院**机构上传(非本院 → 403)。
|
||||
"""
|
||||
inst = self.get_object()
|
||||
if not is_super(request.user) and inst.id != request.user.institution_id:
|
||||
raise AppError('CMS_PERMISSION_DENIED', '医院管理员只能上传本机构 Banner 图', status_code=403)
|
||||
file = request.FILES.get('file')
|
||||
if not file:
|
||||
raise AppError('CMS_BANNER_FILE_REQUIRED', '请上传图片文件(字段名 file)', status_code=400)
|
||||
|
||||
Reference in New Issue
Block a user