- requests_app/rules.py: 8 предикатов + 10 правил * Предикаты: is_request_author, is_request_assignee, can_manage_requests и др. * Правила: view/change/delete/assign/approve requests, комментирование, статистика - communications/rules.py: 9 предикатов + 15 правил * Предикаты: is_chat_member, is_chat_owner, is_chat_admin, is_message_author и др. * Правила: view/send/change/delete чаты и сообщения, управление участниками, закрепление * Включены примеры для WebSocket consumers - calendar_app/rules.py: 9 предикатов + 12 правил * Предикаты: is_calendar_owner, is_personal_calendar, has_calendar_access и др. * Правила: view/change/delete календари и события, подписки, экспорт iCal, приглашения - procurement/rules.py: 8 предикатов + 13 правил * Предикаты: is_procurement_manager, is_purchase_request_author, can_approve_purchases и др. * Правила: view/change/delete заявки на закупку, управление поставщиками и договорами - feed/rules.py: 8 предикатов + 11 правил * Предикаты: is_post_author, can_publish_posts, can_moderate_posts и др. * Правила: view/create/change/delete посты, публикация, закрепление, комментирование, реакции Во всех apps.py добавлен импорт rules для автозагрузки правил при старте Django
46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
# backend/calendar_app/apps.py
|
|
from __future__ import annotations
|
|
|
|
from django.apps import AppConfig
|
|
from django.apps import apps as django_apps
|
|
from django.db.models.signals import post_delete, post_save
|
|
|
|
|
|
class CalendarAppConfig(AppConfig):
|
|
"""Конфиг приложения календаря. Подключает сигналы к модели сотрудника."""
|
|
name = "calendar_app"
|
|
verbose_name = "Календарь"
|
|
|
|
def ready(self) -> None:
|
|
"""Подключает обработчики сигналов к employees.Employee.
|
|
|
|
Raises:
|
|
LookupError: Если приложение 'employees' или модель 'Employee' не найдены.
|
|
"""
|
|
import calendar_app.notification_signals # noqa: F401
|
|
from calendar_app import signals # noqa: F401 - старая система
|
|
import calendar_app.rules # django-rules: регистрация предикатов и правил доступа
|
|
|
|
try:
|
|
Employee = django_apps.get_model("employees", "Employee")
|
|
except LookupError:
|
|
# Если в проекте иное имя модели — замените здесь.
|
|
return
|
|
|
|
# ===== СТАРАЯ СИСТЕМА (calendar_app) =====
|
|
# Оставлена для совместимости во время миграции
|
|
post_save.connect(
|
|
signals.handle_employee_saved,
|
|
sender=Employee,
|
|
dispatch_uid="calendar_app.employee_saved_sync_birthday",
|
|
)
|
|
post_delete.connect(
|
|
signals.handle_employee_deleted,
|
|
sender=Employee,
|
|
dispatch_uid="calendar_app.employee_deleted_remove_birthday",
|
|
)
|
|
|
|
# NOTE: Синхронизация дней рождения через django-scheduler
|
|
# перенесена в employees/signals_birthday.py
|
|
|