mirror of
https://github.com/EDeev/tablo.git
synced 2026-10-07 20:49:31 +03:00
- экспорт в JSON/CSV/PDF/PNG пускал любого вошедшего к любому расписанию, у которого есть хоть одна ссылка-приглашение (достаточно перебрать id); теперь — только владелец и редакторы, как и просмотр по id; - три копии проверки прав сведены в app/access.py; - без SECRET_KEY приложение не запускается (кроме отладки и тестов): со значением по умолчанию cookie сессии можно было подделать и войти под любым пользователем; - текст исключения от ИИ-провайдера больше не уходит в интерфейс, ошибка пишется в лог; - DATABASE_URL как альтернатива DB_*; debug в run.py — из FLASK_DEBUG; - неиспользуемые импорты и переменные удалены (ruff).
20 lines
889 B
Python
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
|