1
0
Fork 0
mirror of https://github.com/EDeev/tablo.git synced 2026-10-07 20:49:31 +03:00
tablo/app/access.py
Egor Deev 164623417c Безопасность: права на экспорт, обязательный SECRET_KEY, ошибки ИИ не показываются пользователю
- экспорт в JSON/CSV/PDF/PNG пускал любого вошедшего к любому расписанию, у которого
  есть хоть одна ссылка-приглашение (достаточно перебрать id); теперь — только владелец
  и редакторы, как и просмотр по id;
- три копии проверки прав сведены в app/access.py;
- без SECRET_KEY приложение не запускается (кроме отладки и тестов): со значением по
  умолчанию cookie сессии можно было подделать и войти под любым пользователем;
- текст исключения от ИИ-провайдера больше не уходит в интерфейс, ошибка пишется в лог;
- DATABASE_URL как альтернатива DB_*; debug в run.py — из FLASK_DEBUG;
- неиспользуемые импорты и переменные удалены (ruff).
2026-10-02 13:10:20 +00:00

20 lines
889 B
Python

"""Права доступа к расписанию: владелец или редактор по ссылке на редактирование."""
from flask_login import current_user
from app.models.schedule import Schedule
from app.models.share import Share, ShareEditor
def can_edit(schedule: Schedule) -> bool:
if not current_user.is_authenticated:
return False
if schedule.user_id == current_user.id:
return True
edit_share = Share.query.filter_by(schedule_id=schedule.id, share_type='edit').first()
if edit_share is None:
return False
return ShareEditor.query.filter_by(share_id=edit_share.id, user_id=current_user.id).first() is not None
# Просмотр по id доступен тем же, кто может редактировать; остальные смотрят по ссылке /shared/<token>
can_view = can_edit