Skip to content

Repository files navigation

Система управления пользователями и правами доступа

  1. Описание проекта

Данный проект реализует систему управления пользователями с возможностью:

Регистрации новых пользователей

Авторизации (login) и выхода из системы (logout)

Обновления информации о пользователе

Мягкого удаления аккаунта (аккаунт становится неактивным)

Управления токенами доступа (JWT) и обновления токенов

Ограничения доступа к ресурсам по ролям

Технологии: FastAPI, SQLAlchemy, PostgreSQL / SQLite, JWT, Passlib (bcrypt).

  1. Модель данных Таблица users Поле Тип Описание id int Уникальный идентификатор first_name str Имя пользователя last_name str Фамилия пользователя email str Email (уникальный) password str Хэш пароля is_active bool Статус аккаунта (True — активен, False — удален) role str Роль пользователя (по умолчанию 'user') Таблица refresh_tokens Поле Тип Описание id int Уникальный идентификатор user_id int Идентификатор пользователя token str Токен обновления (refresh token) expires_at datetime Дата и время истечения токена
  2. Система ролей и прав доступа

Роли пользователей:

Роль Доступные действия user Просмотр своего профиля (/me), обновление своего профиля (/users_update/) admin Все действия пользователя + просмотр всех пользователей (/users/), удаление и обновление любых пользователей

Принцип ограничения доступа:

Если токен невалидный → возвращается 401 Unauthorized

Если токен валидный, но у пользователя нет права на действие → возвращается 403 Forbidden

Проверка роли и прав осуществляется на уровне эндпоинтов и зависимостей FastAPI (Depends(get_current_token) + проверка роли)

  1. Эндпоинты API Регистрация

POST /create_user/

Параметры: first_name, last_name, email, password, last_password

Проверяет корректность пароля и уникальность email

Возвращает данные созданного пользователя (без пароля)

Авторизация

POST /login/

Параметры: email, password

Возвращает: access_token (JWT), refresh_token, token_type

Обновление токена

POST /restart_access_token/

Параметры: refresh_token

Возвращает новый access_token и refresh_token

Просмотр пользователя

GET /users/{user_id} — доступен только для авторизованных

GET /users/ — для администратора, возвращает список всех пользователей

GET /me/ — возвращает профиль текущего пользователя

Обновление пользователя

PUT /users_update/

Пользователь может обновить только свой профиль

Админ может обновлять любые профили (при расширении функционала)

Удаление пользователя (мягкое)

DELETE /users/{user_id}

Аккаунт становится is_active=False

Удаляются все refresh токены

Пользователь не может войти повторно

Выход из системы

POST /logout/

Удаляет все refresh токены пользователя

  1. Проверка уникальности email при обновлении

При обновлении профиля проверяется, чтобы новый email не совпадал с email других пользователей:

email_exists = db.query(User).filter(User.email == new_email, User.id != current_user.id).first() if email_exists: raise HTTPException(status_code=400, detail="Email уже используется")

Таким образом, пользователь не может «переписать» чужой email.

  1. Работа с JWT

Access Token: срок жизни 15 минут

Refresh Token: срок жизни 7 дней

При logout или удалении аккаунта все refresh токены удаляются

После logout пользователь не сможет обновлять access token

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages