diff --git a/api/src/api/v1/deps.py b/api/src/api/v1/deps.py index 1093752..29038d2 100644 --- a/api/src/api/v1/deps.py +++ b/api/src/api/v1/deps.py @@ -102,6 +102,7 @@ def require_executor( UserRoleEnum.ADMIN, UserRoleEnum.EXECUTOR_DFIP, UserRoleEnum.EXECUTOR_RF, + UserRoleEnum.EXECUTOR_DURRS, ]: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, @@ -110,10 +111,14 @@ def require_executor( return current_user -def require_executor_dfip( +def require_executor_dfip_or_durrs( current_user: AppUser = Depends(get_current_active_user_with_set_db), ) -> AppUser: - if current_user.role_id not in [UserRoleEnum.ADMIN, UserRoleEnum.EXECUTOR_DFIP]: + if current_user.role_id not in [ + UserRoleEnum.ADMIN, + UserRoleEnum.EXECUTOR_DFIP, + UserRoleEnum.EXECUTOR_DURRS, + ]: raise HTTPException( status_code=status.HTTP_403_FORBIDDEN, detail="Недостаточно прав", diff --git a/api/src/api/v1/users.py b/api/src/api/v1/users.py index aeba3ce..1469867 100644 --- a/api/src/api/v1/users.py +++ b/api/src/api/v1/users.py @@ -4,7 +4,7 @@ from sqlalchemy.ext.asyncio import AsyncSession from src.api.v1.deps import ( get_current_active_user, require_admin, - require_executor_dfip, + require_executor_dfip_or_durrs, ) from src.db.session import get_db from src.db.models.app_user import AppUser @@ -65,7 +65,7 @@ async def get_users( async def get_many_ssp( user_id: int, db: AsyncSession = Depends(get_db), - current_user: AppUser = Depends(require_executor_dfip), + current_user: AppUser = Depends(require_executor_dfip_or_durrs), ): user_service = UserService(db) ssp_list = await user_service.get_many_ssp(user_id, current_user) diff --git a/api/src/db/models/form_type.py b/api/src/db/models/form_type.py index 27384fb..9137add 100644 --- a/api/src/db/models/form_type.py +++ b/api/src/db/models/form_type.py @@ -41,7 +41,7 @@ class FormType(Base): FormTypeEnum.FORM_1: ["plan", "contract_summary", "allocation", "sequestration", "reserve", "approved", "collegial", "ckk", "contract_detail", "q1", "q2", "q3", "q4", "totals"], FormTypeEnum.FORM_2: ["plan", "seq_dfip", "seq_ssp", "approved", "contract", "booking", "q1", "q2", "q3", "q4", "totals", "contract_summary", "allocation", "collegial", "ckk", "fact_q1", "fact_q2", "fact_q3", "fact_q4"], FormTypeEnum.FORM_3: ["q1", "q2", "q3", "q4", "year"], - FormTypeEnum.FORM_4: ["plan", "seq_dfip", "approved", "contract", "booking", "q1", "q2", "q3", "q4", "totals", "contract_summary", "allocation", "reserve", "collegial", "ckk"], + FormTypeEnum.FORM_4: ["header", "plan", "seq_dfip", "approved", "contract", "booking", "q1", "q2", "q3", "q4", "totals", "contract_summary", "allocation", "reserve", "collegial", "ckk"], } _sheet_list_with_directions = { diff --git a/api/src/domain/schemas.py b/api/src/domain/schemas.py index b34328b..d9d8ad8 100644 --- a/api/src/domain/schemas.py +++ b/api/src/domain/schemas.py @@ -3,7 +3,7 @@ import enum from typing import Any, Dict, Generic, List, Literal, Optional, TypeVar from sqlalchemy.exc import MissingGreenlet -FormPhaseRole = Literal["DFIP", "EXECUTOR_RF", "ADMIN"] +FormPhaseRole = Literal["DFIP", "EXECUTOR_RF", "ADMIN", "DURRS"] from pydantic import BaseModel, ConfigDict, EmailStr, Field, field_validator, model_validator diff --git a/api/src/services/user_service.py b/api/src/services/user_service.py index 009f2e7..091b2a9 100644 --- a/api/src/services/user_service.py +++ b/api/src/services/user_service.py @@ -160,6 +160,7 @@ class UserService: UserRoleEnum.ADMIN.value, UserRoleEnum.EXECUTOR_DFIP.value, UserRoleEnum.EXECUTOR_RF.value, + UserRoleEnum.EXECUTOR_DURRS.value, ): err = AccessDeniedException() err.description = ( @@ -190,6 +191,7 @@ class UserService: UserRoleEnum.ADMIN.value, UserRoleEnum.EXECUTOR_DFIP.value, UserRoleEnum.EXECUTOR_RF.value, + UserRoleEnum.EXECUTOR_DURRS.value, ): err = AccessDeniedException() err.description = ( diff --git a/web/src/pages/AdminPanel/UsersPage/ModalEditUserSsp.jsx b/web/src/pages/AdminPanel/UsersPage/ModalEditUserSsp.jsx index 2385a5d..62a6679 100644 --- a/web/src/pages/AdminPanel/UsersPage/ModalEditUserSsp.jsx +++ b/web/src/pages/AdminPanel/UsersPage/ModalEditUserSsp.jsx @@ -104,7 +104,7 @@ export const ModalEditUserSsp = ({ open, onClose, user, deps = [], onEdit }) => }> - {curUser.role_id == ROLES_NAME_ID['executor_dfip'] && ( + {[ROLES_NAME_ID['executor_dfip'], ROLES_NAME_ID['executor_durrs']].includes(curUser.role_id) && (