5.12 Управление правами доступа в FastAPI
5 из 5 шагов пройдено

Запустим сервер и приступим к тестированию. Первым делом создадим нового пользователя, которого мы потом назначим как продавца:

Если мы сейчас перейдем в БД, то увидим что данный пользователь был создан как покупатель. То есть поле is_customer = True

Авторизуемся как администратор, нажав на кнопку «Authorize» в правом верхнем углу документации. И перейдем в конечную точку Supplier Permission. Введем id созданного пользователя и отправим запрос:

В результате мы получим ответ, что пользователь стал продавцом. Зайдем в БД, и посмотрим значения полей этого пользователя:

Поле is_supplier стало равно True, а поле is_customer = False, что означает что этот пользователь теперь будет считаться как продавец. Наша конечная точка прекрасно работает, также добавим конечную точку, для удаления пользователей.

@router.delete('/delete')
async def delete_user(db: Annotated[AsyncSession, Depends(get_db)], get_user: Annotated[dict, Depends(get_current_user)], user_id: int):
    if get_user.get('is_admin'):
        user = await db.scalar(select(User).where(User.id == user_id))

        if user.is_admin:
            raise HTTPException(
                status_code=status.HTTP_401_UNAUTHORIZED,
                detail="You can't delete admin user"
            )

        if user.is_active:
            await db.execute(update(User).where(User.id == user_id).values(is_active=False))
            await db.commit()
            return {
                'status_code': status.HTTP_200_OK,
                'detail': 'User is deleted'
            }
        else:
            await db.execute(update(User).where(User.id == user_id).values(is_active=True))
            await db.commit()
            return {
                'status_code': status.HTTP_200_OK,
                'detail': 'User is activated'
            }
    else:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="You don't have admin permission"
        )

Данный код, почти не отличается от предыдущего, основное отличие, что мы будем менять значение поля is_active у пользователей. Проверим работу, отправив запрос:

Мы видим что мы удалили пользователя, установив значение is_active = False. Если мы отправим запрос еще раз, то активируем пользователя:

В следующем шаге, мы доработаем маршруты products и category, для установки в них прав доступа.


Будьте вежливы и соблюдайте наши принципы сообщества. Пожалуйста, не оставляйте решения и подсказки в комментариях, для этого есть отдельный форум.
Нет обсуждений. Начните первое.