78475b58e9
- acore: Celery-приложение (брокер из env, eager без брокера), настройки CELERY_*, регистрация всех новых приложений в INSTALLED_APPS, маршруты - core/utils: render_page (HTMX-фрагмент/полный layout), is_owner/ is_owner_or_staff; templatetags common_tags (initials, clean_excerpt, is_it_staff); UpdateLastSeenMiddleware - static: people-picker (дерево отделов с аватарками), searchable-select (одиночный выбор с поиском), directory-quick-add, it-manager, pagination; тема Tailwind v4 пересобрана, лого - templates: новый шелл index.html (мобильный сайдбар, темы, фон, user-dropdown) и login с брендингом Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
9 lines
501 B
Python
9 lines
501 B
Python
def is_owner_or_staff(user, obj, owner_field: str = 'author_id') -> bool:
|
|
"""Редактировать может администратор (is_staff) или владелец объекта"""
|
|
return user.is_staff or getattr(obj, owner_field) == user.pk
|
|
|
|
|
|
def is_owner(user, obj, owner_field: str = 'author_id') -> bool:
|
|
"""Удалять с портала может только владелец (staff — через админку)"""
|
|
return getattr(obj, owner_field) == user.pk
|