-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Добавил проверку на наличие скоупа print.file.send #88
base: main
Are you sure you want to change the base?
The head ref may contain hidden characters: "80-\u0434\u043E\u0431\u0430\u0432\u043B\u0435\u043D\u0438\u0435-\u0430\u0443\u0442\u0445\u0430-\u0432-\u043F\u0440\u0438\u043D\u0442\u0435\u0440-\u043A\u0430\u043A-\u0432\u0442\u043E\u0440\u043E\u0433\u043E-\u043C\u0435\u0442\u043E\u0434\u0430-\u0430\u0432\u0442\u043E\u0440\u0438\u0437\u0430\u0446\u0438\u0438"
Добавил проверку на наличие скоупа print.file.send #88
Conversation
В коде добавил опциональность для ввода номера билета, а так же проверку на наличие скоупа внутри имеющихся у юзера. в выводе оставил только имя юзера.
💩 Code linting failed, use |
Coverage Report
Summary
|
линтинг упал, пропиши |
тебе нужен был файл |
В POST запросе check_union_member вернул код в состояние до первого комита. Для функции send написал одну дополнительную функцию, чтоб проверять наличие скоупа через Depends, добавил опциональный ввод поля number и проверку его наличия уже в самой функции send
💩 Code linting failed, use |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
print_service/routes/file.py
Outdated
if not has_send_scope and inp.number is None: | ||
raise HTTPException( | ||
status_code=400, | ||
detail="Поле number обязательно для пользователей без скоупа print.file.send", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
не юзер френдли ошибка. Она же на фронт пойдет, зачем нам писать служебную информацию?
И наверное это 403 всё-таки
print_service/routes/file.py
Outdated
else: | ||
user = user.filter( | ||
func.upper(UnionMember.surname) == inp.surname.upper(), | ||
) | ||
if not user: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
вот тут добавим также проверку на наличие скоупа
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
то есть если у чела не прописаны ни номер билета, ни фио, ни студак, но при этом есть скоуп, то все хорошо, ошибку не рейзим
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
if user is None
print_service/routes/file.py
Outdated
@@ -96,6 +98,10 @@ class ReceiveOutput(BaseModel): | |||
|
|||
|
|||
# endregion | |||
def has_send_scope( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
давай не будем это выносить в отдельную функцию
async def send( | ||
inp: SendInput, | ||
has_send_scope: bool = Depends(has_send_scope), | ||
settings: Settings = Depends(get_settings), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
депендс пропишем прям тут, это норм
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
депендс от юнионаутха я имею в виду
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
назовем его user, тогда в дальнейшем оттуда мы сможем еще получать user_id
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
auth_user
@@ -63,7 +64,8 @@ class SendInput(BaseModel): | |||
description='Фамилия', |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
смотри, surname тоже становится необязательным для пользователей со скоупом, давай учтем это
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
str | None
default = None
print_service/routes/user.py
Outdated
@@ -46,10 +46,11 @@ class UpdateUserList(BaseModel): | |||
) | |||
async def check_union_member( | |||
surname: constr(strip_whitespace=True, to_upper=True, min_length=1), | |||
number: constr(strip_whitespace=True, to_upper=True, min_length=1), | |||
number: Optional[str] = constr(strip_whitespace=True, to_upper=True, min_length=1), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
не уверен, что тут надо делать поле опциональным
т.к. для пользователей со скоупом в принципе не планируется прокидывание проверки на присутствие в профсоюзе
Сделал все для ревью
💩 Code linting failed, use |
print_service/routes/file.py
Outdated
func.upper(UnionMember.surname) == inp.surname.upper(), | ||
).one_or_none() | ||
|
||
if inp.number is not None: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
and inp.surname is not None
print_service/routes/file.py
Outdated
func.upper(UnionMember.surname) == inp.surname.upper(), | ||
).one_or_none() | ||
else: | ||
if not "print.file.send" in [scope["name"] for scope in user.get('session_scopes')]: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
elif
Осталось только разобраться с базой данных и тестами
Сделал локальную проверку на наличие скоупа print.file.send Пришлось вынести user = user.one_or_none() так как при разных условиях возвращаются разные типы данных (запрос в базу или UnionMember), а далее для создания пина нужен именно UnionMember. Изменение в файле __main__.py предложил сделать Стас, чтоб автоматически при обновлениях кода обновлялось и приложение в вебе
В коде добавил опциональность для ввода номера билета, а так же проверку на наличие скоупа внутри имеющихся у юзера. в выводе оставил только имя юзера.