igor_nadein 3e672b2edc feat: добавлены правила для 5 приложений (requests, communications, calendar, procurement, feed)
- 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
2026-02-28 00:13:46 +03:00

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