Compare commits

..

9 Commits

6 changed files with 14 additions and 7 deletions

View File

@ -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="Недостаточно прав",

View File

@ -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)

View File

@ -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 = {

View File

@ -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

View File

@ -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 = (

View File

@ -104,7 +104,7 @@ export const ModalEditUserSsp = ({ open, onClose, user, deps = [], onEdit }) =>
</Button>
</>
}>
{curUser.role_id == ROLES_NAME_ID['executor_dfip'] && (
{[ROLES_NAME_ID['executor_dfip'], ROLES_NAME_ID['executor_durrs']].includes(curUser.role_id) && (
<Box>
<Typography
sx={{