Entity: PermissionDefinition + полный SEED-каталог permissions
Дом полей справочника прав доступа контекста identity и канонический каталог permissions
контекстов PIN: каталог permissions проектируется в контексте identity. Платформа насчитывает
21 bounded context; собственные права (RBAC-enforcement) в каталоге определяют 19 из них —
остальные контексты прав в каталоге не заводят (управляются платформенными/справочными правами). Все
документы (раздел «Актор» API-методов, use-cases) ссылаются на коды отсюда и не переопределяют их.
Metadata
| Поле | Значение |
|---|---|
| Контекст | identity |
| Статус | draft |
| Owning team | PIN Platform Core |
Назначение
PermissionDefinition — таблица определения прав доступа (ид, название, код), которую владельцы
системы заполняют через SEED. Permission — атомарное право на действие/фичу в формате
<context>.<entity>.<action>. Компании собирают из каталога свои роли (role.md);
изменение каталога — только релизом (SEED-миграция), не runtime-API.
Суффиксы action:
| Суффикс | Смысл |
|---|---|
view / manage | чтение / полное управление сущностями в границах scope назначения |
view-own / manage-self | record-level: только записи, где актор — владелец (OwnerUserId/UserId) |
view-team | record-level: записи своей группы/подчинённых (руководитель агентства) |
view-all | кросс-tenant видимость (только платформенные роли ПИН — ADR-0052) |
Классификация
| Поле | Значение |
|---|---|
| Контекст | identity |
| Kind | Entity (anemic reference data, SEED) |
| Source of truth | identity (SEED-миграции) |
| Таблица | identity.permission_definitions |
| Tenant isolation | не tenanted — платформенный справочник (ADR-0052 п.3) |
Поля
| Поле | Тип | Обязательность | Ограничения (PK/FK/index/constraint) | Источник | Описание |
|---|---|---|---|---|---|
Id | Guid | Да | PK | SEED (фиксированные детерминированные Guid, производные от Code) | Идентификатор права. |
Code | string | Да | varchar(128), unique ux_permission_definitions_code, pattern ^[a-z][a-z-]*\.[a-z][a-z-]*\.[a-z][a-z-]*$ | SEED | Код <context>.<entity>.<action>. Стабильный контракт: не переименовывается, только deprecate + новый код. |
Name | string | Да | varchar(256) | SEED | Название по-русски (UI настройки ролей). |
Description | string | Да | varchar(512) | SEED | Что именно разрешает. |
Context | string | Да | varchar(32), index ix_permission_definitions_context; значение ∈ контексты PIN (в каталоге представлены 19) | SEED | Контекст-владелец enforcement-а. |
MinScopeType | ResourceScopeType | Да | enum (хранится как text) | SEED | Минимально допустимый scope назначения: Platform — только платформенные роли (например *.view-all); Organization/Project — назначаемо компаниям. |
IsAssignableByCompanies | bool | Да | default true | SEED | false — право нельзя включить в роль компании (только системные роли/администратор платформы). |
IsDeprecated | bool | Да | default false | SEED | Право выведено из употребления; в новые роли не добавляется, существующие связи работают до миграции. |
CreatedAt / UpdatedAt | DateTimeOffset | Да | — | SEED | Штампы миграций. |
Value objects
Не используются. JSONB-модели не используются.
Связи
| Связь | Тип | Ключ | Правило загрузки | Delete behavior |
|---|---|---|---|---|
RolePermission | reference (обратная) | role_permissions.permission_id | GetByIds при сборке permission-set роли | restrict (право с привязками не удаляется, только deprecate) |
Инварианты
| Инвариант | Условие | Где проверяется | Ошибка |
|---|---|---|---|
| INV-P1 SeedOnly | Записи создаются/меняются только SEED-миграцией (runtime-API отсутствует) | архитектурно: нет command-handlers на запись | — |
| INV-P2 CodeStable | Code иммутабелен; переименование = deprecate старого + новый код + миграция ролей | правило релиза | — |
| INV-P3 CodeFormat | Code соответствует pattern и его <context>-сегмент = Context | SEED-валидация в миграторе | ошибка миграции |
| INV-P4 CompanyAssignable | В роли компаний (RoleDefinition.CompanyId != null) добавляются только IsAssignableByCompanies = true и не IsDeprecated | RoleDefinition.GrantPermission | IDENTITY_PERMISSION_NOT_ASSIGNABLE |
stateDiagram неприменим — у справочника нет жизненного цикла, кроме флага IsDeprecated.
События
Доменные/интеграционные события не поднимаются: изменение каталога происходит SEED-миграцией при релизе;
consumers получают обновления прав через UserAccessChangedKafkaEvent (role.md).
SEED-каталог permissions (полный, 139 позиций)
Колонка «Роли по умолчанию» — системные роли платформы, в которые право входит SEED-ом:
guest, investor, agent, agency-owner (наследует всё от agent — в таблице указывается только
дельта, пометка «+agent»), developer-manager (сокр. developer), pin-manager, care-operator
(сокр. care), admin (администратор платформы, ADR-0053; для неё каталог — справочный).
Права с view-all/moderate/*.manage платформенного уровня имеют MinScopeType = Platform.
identity (14)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
identity.users.view-self | Просмотр своей учётки | getCurrentInvestor и аналоги: свои ФИО/контакты/флаги безопасности. | investor, agent, developer, pin-manager, care |
identity.users.view | Просмотр пользователей компании | Список/карточки пользователей в scope организации. | agency-owner, developer, pin-manager, care |
identity.users.manage | Управление пользователями компании | Приглашение, изменение, назначение внутренних ролей в scope; увольнение агента — прекращение членства в агентстве (ADR-0072). | agency-owner, developer (только своя компания), admin |
identity.users.block | Блокировка пользователей | Перевод Active → Blocked в scope организации. | agency-owner, admin |
identity.users.view-all | Просмотр любых пользователей | Кросс-tenant поиск/карточки (поддержка, арбитраж). | pin-manager, care, admin |
identity.companies.view | Просмотр своей компании | Карточка/реквизиты/настройки workspace своей компании. | agent, agency-owner, developer, pin-manager, care |
identity.companies.manage | Управление компанией | Изменение описания, slug, workspace-настроек (реплика-поля Talent — read-only). | agency-owner, developer, admin |
identity.companies.view-all | Просмотр всех компаний | Список/карточки всех компаний платформы. | pin-manager, care, admin |
identity.roles.view | Просмотр ролей компании | Список ролей и их permissions в scope. | agent, agency-owner, developer, care |
identity.roles.manage | Управление ролями компании | Создание/изменение/архив ролей CompanyId != null. | agency-owner, developer, admin |
identity.role-assignments.view | Просмотр назначений ролей | Кто какие роли имеет в scope организации. | agency-owner, developer, care, admin |
identity.role-assignments.manage | Назначение/отзыв ролей | RoleAssignment Grant/Revoke в покрываемом scope (INV-R8). | agency-owner, developer, admin |
identity.security.manage-self | Управление своей безопасностью | Пароль, пин-код, 2FA, смена email/телефона. | investor, agent, agency-owner, pin-manager, care |
identity.agent-membership.switch-active-self | Смена активного агентства | Мультиагентский агент выбирает активное членство среди своих агентств (ADR-0070); только своё членство. | agent, agency-owner |
profile (9)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
profile.personal.view-self | Просмотр своего профиля | ФИО, дата рождения, паспортные данные (расшифровка своих). | investor, agent, agency-owner |
profile.personal.manage-self | Управление своим профилем | Редактирование персональных данных (запрещено при ContactsManagedBy = TalentSync). | investor, agent, agency-owner |
profile.contacts.manage-self | Управление контактами профиля | Дополнительные контакты профиля (email/phone по отдельности). | investor, agent, agency-owner |
profile.documents.view-self | Просмотр своих документов | Список/скачивание своих загруженных документов. | investor |
profile.documents.manage-self | Управление своими документами | Загрузка/удаление паспортов (РФ/РБ/КЗ/СНГ/другие), ИНН, кастомных документов. | investor |
profile.requisites.manage-self | Управление шаблонами реквизитов | Несколько наборов данных (муж/жена/дети) для переиспользования в брони/сделке. | investor |
profile.verification.submit | Подача заявки на верификацию | KYC/AML-заявка инвестора. | investor |
profile.verification.review | Рассмотрение верификаций | Просмотр и решение по заявкам верификации/квалификации. | pin-manager, care, admin |
profile.personal.view-any | Просмотр чужого профиля | Только для поддержки/арбитража, с аудитом каждого доступа; значения документов маскируются. | care, admin |
chessboard (8)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
chessboard.projects.view | Просмотр проектов | Проекты/здания/литеры своей компании, включая скрытые из каталога. | developer, pin-manager, care |
chessboard.projects.manage | Управление проектами | Создание/изменение проектов, деклараций, статусов строительства (scope: организация/группа/проект). | developer, admin |
chessboard.buildings.manage | Управление зданиями | Здания/литеры/корпуса, этажность, сроки сдачи. | developer, admin |
chessboard.units.view | Просмотр шахматки | Полная шахматка со статусами и служебными полями. | developer, pin-manager, care |
chessboard.units.manage | Управление объектами | Квартиры/лоты: площади, цены, атрибуты. | developer, admin |
chessboard.units.change-status | Смена статуса объекта | Ручной перевод Свободен/Резерв/Бронь/Продан/Скрыт (авто-переходы делает crm событиями). | developer, pin-manager, admin |
chessboard.layouts.manage | Управление планировками | Layout/LayoutGroup — основа правил вознаграждений. | developer, admin |
chessboard.dictionaries.manage | Справочники шахматки | Банки, отельеры (Id, Название, Лого). | pin-manager, admin |
catalog (5)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
catalog.listings.view-public | Просмотр публичного каталога | Лента/поиск/фильтры/карточка (гейт доступа: токен или реф-cookie). | guest, investor, agent, agency-owner, developer, pin-manager, care |
catalog.listings.view-full | Полная карточка объекта | Расширенные метрики, история, служебные поля поверх публичной проекции. | investor, agent, agency-owner, developer, pin-manager |
catalog.overrides.manage | Оверрайды витрины | Правки лотов/корпусов поверх данных источника. | pin-manager, admin |
catalog.promotion.manage | Пакеты продвижения | Настройка приоритета показа проектов/объектов (монетизация — реализация отложена, решение №10). | pin-manager, admin |
catalog.ranking.manage | Ранжирование каталога | Правила сортировки/бустинга ленты. | admin |
invest-analytics (5)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
invest-analytics.series.view | Просмотр инвест-серий | Помесячные серии, калькулятор, ROI, юр/физ + УСН/ОСНО. | investor, agent, agency-owner, developer, pin-manager |
invest-analytics.price-history.view | История цен | График роста цены объекта (ClickHouse). | investor, agent, agency-owner, developer, pin-manager |
invest-analytics.model-config.manage | Эконом-модель платформы | model_config: глобальные дефолты роста/аренды/налогов. | pin-manager, admin |
invest-analytics.property-object-type-config.manage | Модель по типам объектов недвижимости | lot_type_config + помесячные оверрайды + investor-preview. | pin-manager, admin |
invest-analytics.reports.export | Экспорт расчёта | PDF/Excel-отчёт доходности («Скачать расчёт»). | investor, agent, agency-owner, pin-manager |
rewards (19)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
rewards.rules.view | Просмотр правил вознаграждений | Правила комиссий застройщика по типам/Layout/площади. | agent, agency-owner, developer, pin-manager |
rewards.rules.manage | Управление правилами вознаграждений | Настройка % от базовой/конечной цены и условий (застройщик). | developer, admin |
rewards.commission-policy.view | Просмотр комиссионной политики | Распределение комиссии внутри агентства. | agent (своя часть), agency-owner |
rewards.commission-policy.manage | Управление комиссионной политикой | Матрица распределения, платёжные поручения (агентство). | agency-owner, admin |
rewards.accruals.view-own | Свои начисления | Комиссии агента: подтверждено / ожидает подтверждения. | agent |
rewards.accruals.view-team | Начисления команды | Начисления всех агентов агентства с фильтром по агенту. | agency-owner, pin-manager |
rewards.payouts.manage | Управление выплатами | Реестр и история выплат, формирование платёжных поручений (подтверждение начислений — rewards.accruals.confirm, утверждение выплаты — rewards.payouts.approve). | agency-owner, pin-manager, admin |
rewards.platform-terms.view | Просмотр условий платформы | Финансовые условия площадки: комиссия ПИН, база расчёта, удержания (только чтение). | agency-owner, developer, pin-manager |
rewards.platform-terms.manage | Управление условиями платформы | Настройка комиссии ПИН и платформенных финансовых условий вознаграждения. | pin-manager, admin |
rewards.referral-rates.manage | Ставки реферальной программы | Настройка ставок реферальных/партнёрских вознаграждений платформы. | pin-manager, admin |
rewards.receipts.manage | Чеки к выплатам | Загрузка/привязка/проверка чеков самозанятости (НПД) к начислениям и выплатам. | agency-owner, pin-manager, admin |
rewards.accruals.confirm | Подтверждение начислений | Перевод начисления Ожидает → Подтверждено в scope. | agency-owner, pin-manager, admin |
rewards.accruals.adjust | Корректировка начислений | Прямое изменение суммы/статуса начисления (back-office коррекция). | pin-manager, admin |
rewards.accruals.manage | Управление начислениями | Ручное создание/пересчёт/аннулирование начислений. | pin-manager, admin |
rewards.payouts.approve | Утверждение выплат | Финальное утверждение выплаты перед перечислением (money-out gate). | agency-owner, pin-manager, admin |
rewards.commission.view-all | Все комиссии платформы | Кросс-tenant просмотр комиссий всех агентов/агентств (финансовый надзор). | pin-manager, admin |
rewards.referral.view-own | Свои реферальные вознаграждения | Начисления по своим рефералам/партнёрским ссылкам. | investor, agent, agency-owner |
rewards.commission.adjust-request | Запрос корректировки комиссии | Инициирование заявки на пересмотр своей комиссии (например, при co-broking, ADR-0069). | agent, agency-owner |
rewards.commission.adjust-approve | Утверждение корректировки комиссии | Решение по заявке на корректировку комиссии. | agency-owner, pin-manager, admin |
Канонические коды политики распределения комиссии — rewards.commission-policy.view /
rewards.commission-policy.manage. Встречающиеся в API-документах коды rewards.commission-policy.* —
прежнее написание тех же прав; читать как rewards.commission-policy.* (единый код каталога).
wallet (5)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
wallet.balance.view-own | Свой баланс | Текущий баланс собственного кошелька (доступно/в ожидании/выведено). | investor, agent, agency-owner |
wallet.transactions.view-own | Свои транзакции | История операций собственного кошелька (начисления, списания, выплаты). | investor, agent, agency-owner |
wallet.team.view | Кошельки команды | Балансы и операции кошельков агентов своего агентства (руководитель). | agency-owner, pin-manager |
wallet.accounts.view-all | Все кошельки платформы | Кросс-tenant просмотр кошельков и балансов (финансовый надзор). | pin-manager, admin |
wallet.adjustments.manage | Корректировки кошелька | Ручные проводки/корректировки баланса (кредит/дебет) с аудитом. | pin-manager, admin |
referral (4)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
referral.links.manage-self | Управление своими реф-ссылками | Создание/изменение/удаление ссылок по каналам. | investor, agent, agency-owner, pin-manager |
referral.links.view-self | Просмотр своих реф-ссылок | getMyReferralLinks, getMyReferrer. | investor, agent, agency-owner, pin-manager |
referral.registrations.view-self | Журнал своих регистраций | getLinkRegistrations/getAllRegistrations по своим ссылкам. | investor, agent, agency-owner, pin-manager |
referral.registrations.view-all | Полный журнал рефералов | Admin-журнал ссылок/регистраций всех пользователей. | pin-manager, admin |
crm (25)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
crm.leads.view | Просмотр лидов | Карточки пути клиента; record-level: агент — свои, руководитель агентства — команды, инвестор — свои, Менеджер ПИН/забота — сквозно (platform-scope). | agent, agency-owner, investor, pin-manager, care |
crm.leads.participate | Участие в своём лиде | Инвесторская сторона лида: объекты-намерения (booking-intents: добавить/подтвердить/снять), хотелки клиента; record-level PrimaryInvestorUserId = actor, кросс-tenant участник (ADR-0052). | investor |
crm.leads.manage | Управление лидами | Создание/продление/закрытие лида, хотелки клиента, предложение объекта-намерения агентом. | agent, pin-manager |
crm.fixation-requests.create | Создание заявки на фиксацию | Запрос застройщику закрепить клиента за агентом. | agent |
crm.fixation-requests.view-own | Свои заявки на фиксацию | Record-level: владелец-агент. | agent |
crm.fixation-requests.view-team | Фиксации команды | Фиксации агентов группы/агентства («агент и его руководитель/группа, но не все»; видимость сужается FixationVisibility workspace-настройкой). | agency-owner, pin-manager |
crm.fixation-requests.review | Рассмотрение фиксаций | Одобрение/отклонение, пометка уникальный/не уникальный (застройщик; дубли по ФИО/телефону FTS). | developer |
crm.deals.view-own | Свои сделки | Сделки, где актор — участник (Investor/Agent/SellManager). | investor, agent, developer |
crm.deals.view-team | Сделки команды | ВСЕ сделки менеджеров компании с фильтрами по агенту/статусу/дате. | agency-owner, developer |
crm.deals.view-all | Все сделки платформы | Сквозная видимость для сопровождения (US-MGR-01..06). | pin-manager, care, admin |
crm.deals.create | Создание сделки | Из лида или после одобрения фиксации (решение №7: создаёт агент или менеджер ПИН). | agent, pin-manager |
crm.deals.manage | Ведение сделки | Изменение полей, документов, перемещение по этапам своей сделки. | agent, developer, pin-manager |
crm.deals.manage-status | Ручное управление статусами | Принудительная смена статуса/этапа любой сделки (арбитраж). | pin-manager, care (супервизор), admin |
crm.deals.members.manage | Участники сделки | Добавление/удаление/смена роли участника. | agent, developer, pin-manager |
crm.steps.view | Просмотр этапов воронки | Канбан-доска, группы этапов. | agent, agency-owner, developer, pin-manager |
crm.steps.manage | Настройка этапов | Настраиваемые этапы застройщика с привязкой к системным группам (SEED-группы меняем только мы). | developer, admin |
crm.bookings.create | Заявка на бронирование | Кнопка «Забронировать» (ФИО+телефон), резерв 1 час. | guest (через lazy-регистрацию), investor, agent |
crm.bookings.view-own | Свои брони | Статус/таймер/оплата своих бронирований (US-INV-21). | investor, agent |
crm.bookings.manage | Управление бронями | Подтверждение/продление/отмена брони по программе. | developer, pin-manager |
crm.booking-programs.manage | Программы бронирования | Платность/сумма/длительность брони застройщика (решение №7: таймеры — параметры программы). | developer, admin |
crm.purchase-programs.manage | Программы покупки | 100%/рассрочки (InstallmentPreset)/ипотека; серверный расчёт графиков. | developer, pin-manager, admin |
crm.documents.view | Документы сделки | Просмотр/скачивание в сделках, доступных актору. | investor, agent, developer, pin-manager |
crm.documents.manage | Управление документами сделки | Загрузка/замена/удаление документов сделки. | agent, developer, pin-manager |
crm.statistics.view-company | Статистика компании | Дашборд ЛК застройщика/агентства: активные/закрытые сделки, суммы, комиссия. | agency-owner, developer, pin-manager |
crm.statistics.view-agent | Статистика по агенту | Точечная статистика конкретного агента. | agency-owner, pin-manager |
calendar (6)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
calendar.events.view | Просмотр своего календаря | Список/карточка собственных событий календаря (агент/консультант ПИН), включая признак конфликтов. | agent, pin-manager |
calendar.events.manage | Управление своим календарём | Создание/изменение/перенос/статусы собственных событий (Origin = Manual); события записей и дедлайны броней защищены инвариантами календаря. | agent, pin-manager |
calendar.slots.manage | Управление слотами доступности | Batch-публикация, просмотр и архивация своих слотов самозаписи. | agent, pin-manager |
calendar.appointments.view | Просмотр записей на свои слоты | Список/карточка записей инвесторов на слоты актора. | agent, pin-manager |
calendar.appointments.decide | Решения по записям | Подтверждение/отклонение/отмена записи и фиксация исхода встречи (Completed/NoShow) по своим слотам. | agent, pin-manager |
calendar.team.view | Календарь команды | Read-only события и записи всех владельцев календарей в scope компании: руководитель агентства — своё агентство; в scope компании ПИН — календари консультантов ПИН. | agency-owner, pin-manager |
investor-owner (3)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
investor-owner.portfolio.view-self | Свой портфель | Купленные объекты, цены покупки/продажи, доход. | investor |
investor-owner.portfolio.manage-self | Управление своим портфелем | Отметки о продаже, цели, заметки по объекту. | investor |
investor-owner.portfolio.view-any | Просмотр чужого портфеля | Поддержка/арбитраж, с аудитом доступа. | care, admin |
news (7)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
news.posts.view | Чтение ленты | Публичная лента постов/новостей. | guest, investor, agent, agency-owner, developer, pin-manager, care |
news.posts.create-personal | Публикация от себя | Пост в общую ленту от пользователя. | investor, agent, agency-owner, developer |
news.posts.create-company | Публикация от компании | Пост с привязкой к компании: акции, маркетинг. | agency-owner, developer, pin-manager |
news.posts.create-project | Публикация от проекта | Пост с привязкой к проекту: ход строительства (scope: организация/группа/проект). | developer, pin-manager |
news.posts.manage-own | Управление своими постами | Редактирование/снятие своих публикаций (история — snapshot-ами). | investor, agent, agency-owner, developer, pin-manager |
news.posts.moderate | Модерация ленты | Снятие/правка любых постов, жалобы. | pin-manager, care, admin |
news.categories.manage | Категории новостей | Каталог категорий по типам авторов; доступность категорий компании — workspace-настройка. | admin |
favorites (2)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
favorites.items.manage-self | Своё избранное | Добавление/удаление объектов (user или гостевая сессия; слияние при входе — решение №4). | guest, investor, agent, agency-owner, developer |
favorites.notes.manage-self | Заметки избранного | Заметка ≤ 4000 символов на объекте избранного. | investor, agent, agency-owner, developer |
selections (3)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
selections.collections.manage-self | Свои подборки | Создание вручную/из избранного, элементы, иммутабельные копии для постов. | investor, agent, agency-owner, pin-manager |
selections.collections.share | Публичные ссылки подборок | Генерация/отзыв публичной ссылки («Поделиться подборкой»). | investor, agent, agency-owner, pin-manager |
selections.collections.view-shared | Просмотр по публичной ссылке | Чтение подборки анонимом по ссылке. | guest, investor, agent, agency-owner, developer |
user-activity (5)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
user-activity.sessions.view-self | Свои сессии | Список активных сессий/устройств. | investor, agent, agency-owner, developer |
user-activity.sessions.revoke-self | Завершение своих сессий | Отзыв своей сессии/всех, кроме текущей. | investor, agent, agency-owner, developer |
user-activity.views.view-self | Своя история просмотров | Просмотры с длительностью. | investor, agent, agency-owner |
user-activity.actions.view-lead | Активность клиента в лиде | Просмотры/фильтры/избранное клиента в карточке лида агента. | agent, agency-owner, pin-manager |
user-activity.actions.view-any | Трекинг любого пользователя | Расследования поддержки/арбитраж, с аудитом. | care, admin |
dev-stats (2)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
dev-stats.metrics.view-own | Статистика просмотров своей недвижимости | ClickHouse-метрики внимания к проектам/зданиям/планировкам/группам планировок/объектам своего застройщика: количество просмотров, уникальные зрители, длительность, повторные просмотры, разбивка по типу зрителя (ADR-0057; tenant-scope застройщика обязателен в каждом запросе). | developer |
dev-stats.metrics.view-any | Статистика просмотров любого застройщика | Кросс-tenant доступ платформы к view-метрикам всех застройщиков (поддержка/аналитика ПИН — ADR-0057 п.6). | pin-manager, admin |
messenger (6)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
messenger.chats.participate | Участие в чатах | Чтение/отправка в чатах, где актор — участник (собственный мини-мессенджер PIN на SignalR, ADR-0055). | investor, agent, agency-owner, developer, pin-manager, care |
messenger.chats.create | Создание чатов | Прямые/групповые чаты вне сделок (чаты сделок создаёт оркестратор crm). | agent, agency-owner, developer, pin-manager |
messenger.contacts.manage-self | Свои контакты | Список контактов. | investor, agent, agency-owner, developer, pin-manager |
messenger.blacklist.manage-self | Чёрный список | Блокировка собеседников. | investor, agent, agency-owner, developer |
messenger.chats.moderate | Модерация чатов | Просмотр/вмешательство в любые чаты (история правок, IP/UA) при расследовании. | care (супервизор), admin |
messenger.deal-chats.join-any | Вход в любой чат сделки | Авто-участие Менеджера ПИН в чатах сделок (US-MGR). | pin-manager |
notifications (3)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
notifications.settings.manage-self | Свои настройки уведомлений | Каналы/подписки/отписки. | investor, agent, agency-owner, developer, pin-manager, care |
notifications.templates.manage | Шаблоны уведомлений | CRUD NotificationTemplate по каналам. | admin |
notifications.dispatch-log.view | Журнал отправок | DispatchLog для расследований доставки. | care, admin |
support (8)
| Code | Название | Описание | Роли по умолчанию |
|---|---|---|---|
support.tickets.create | Создание тикета | Обращение в службу заботы. | investor, agent, agency-owner, developer |
support.tickets.view-own | Свои тикеты | Статусы и переписка своих обращений. | investor, agent, agency-owner, developer |
support.tickets.handle | Обработка тикетов | Взятие в работу, ответы, смена статусов (уровень оператор). | care |
support.tickets.supervise | Супервизия очереди | Переназначение, эскалации, SLA-отчёты (уровень супервизор). | care (супервизор), admin |
support.arbitrage.manage | Арбитраж | ArbitrageCase: расследования по аудиту, ручные вмешательства в crm/identity. | care (супервизор), pin-manager, admin |
support.knowledge-base.view | База знаний | Чтение статей/шаблонных ответов. | care, pin-manager |
support.knowledge-base.manage | Управление базой знаний | CRUD статей и шаблонных ответов. | care (супервизор), admin |
support.workspaces.impersonate-view | Просмотр чужого ЛК | Read-only вид ЛК застройщика/агентства для помощи («видеть ЛК застройщика и помогать»); каждый вход аудируется. | care, admin |
Итого: 14+9+8+5+5+19+5+4+25+6+3+7+2+3+5+2+6+3+8 = 139 permissions (19 контекстов).
Назначаются только платформенным ролям ПИН/администратору платформы: все *.view-all, *.view-any,
identity.companies.view-all, crm.deals.manage-status, catalog.overrides.manage,
catalog.promotion.manage, catalog.ranking.manage, invest-analytics.model-config.manage,
invest-analytics.property-object-type-config.manage, chessboard.dictionaries.manage,
news.posts.moderate, news.categories.manage, messenger.chats.moderate,
messenger.deal-chats.join-any, notifications.templates.manage, notifications.dispatch-log.view,
rewards.platform-terms.manage, rewards.referral-rates.manage, rewards.accruals.adjust,
rewards.accruals.manage, wallet.adjustments.manage, support.* кроме create/view-own,
referral.registrations.view-all. У них IsAssignableByCompanies = false.
Как каталог применяется при назначении роли
Три поля каталога совместно ограничивают, где право может действовать (enforcement — на write-path
RoleAssignment и RoleDefinition.GrantPermission, дом — role.md):
MinScopeTypeзадаёт минимальный scope назначения роли с этим правом:RoleAssignment.Scopeне может быть уже требуемого (правоMinScopeType = Platform→ роль назначима только в scopePlatform;Organization/Project— назначима компаниям). Роль наследует floor как максимумMinScopeTypeсвоих прав.IsAssignableByCompanies = falseдополнительно запрещает включать право в роль компании (RoleDefinition.CompanyId != null, INV-P4) — так все платформенные права (view-all/view-any/moderate, admin-фичи витрины/эконом-модели) остаются только у системных ролей ПИН и администратора платформы (INV-R3 role.md); попытка компании собрать такое право в свою роль →IDENTITY_PERMISSION_NOT_ASSIGNABLE.IsDeprecated = trueисключает право из новых ролей (существующие связи живут до миграции, INV-P4).
Состав permissions роли в событиях доступа не передаётся: потребитель резолвит RoleCode/RoleId → permissions интроспекцией каталога ролей identity; неизвестный на стороне enforcement код — deny by default.
Индексы, хранение, безопасность
| Аспект | Значение |
|---|---|
| Индексы | PK (Id); ux_permission_definitions_code unique btree; ix_permission_definitions_context btree |
| Партиционирование / retention | none — ~140 строк reference data; кэшируется in-memory на всех инстансах identity |
| Concurrency | не требуется (иммутабельно вне SEED) |
| Permissions / PII | чтение каталога — любой аутентифицированный (нужно UI настройки ролей: identity.roles.view); запись — только миграция; PII нет |
| Audit | история — миграциями в VCS; UpdatedAt штампуется миграцией |
Совместимость
- Добавление permission — additive (новый SEED-инсерт).
- Удаление/переименование — breaking:
IsDeprecated = true, новый код, миграцияRolePermission, sunset через 2 релиза. - Неизвестный код на стороне enforcement-контекста трактуется как «право отсутствует» (deny by default).
Обратные ссылки
Автоссылки: где используется этот документ.
- Домен (CQRS) (11): Entity / Aggregate: BlacklistEntity, Entity / Aggregate: CatalogPropertyObjectCard, Entity / Aggregate: Comment (вложенные, переключаемые), Entity / Aggregate: DeveloperRankingRule, Entity / Aggregate: PersonEntity, Entity / Aggregate: PostCategory, Entity / Aggregate: ReferralLinkEntity, Entity / Aggregate: RequisiteTemplateEntity, Entity / Aggregate: RoleDefinition (+ RolePermission, RoleAssignment / UserRole, ResourceScope), Entity / Aggregate: UserEntity, Entity / Aggregate: VerificationRequestEntity
- API (137): Admin CRUD банков — создание / список / карточка / правка / архив / lookup, Admin CRUD категорий постов — POST/PUT/GET /api/v1/admin/categories (m2m), Admin CRUD отельеров (создание / список / карточка / правка / архив / lookup) — область admin, Admin: модерация постов и комментариев (m2m), Catalog Admin API — реестр методов и общие правила области, Catalog Developers API — реестр методов и общие правила области, Chessboard API — реестр операций областей Developers и Admin, DELETE /api/messenger/contacts/{contactId} — Удалить контакт / отозвать исходящую заявку, DELETE /api/v1/comments/{id} — Удалить/скрыть комментарий, DELETE /api/v1/posts/{id} — Удалить пост (soft + detach snapshots), GET /api/admin/referrals/investors/{investorId}/referrals — Список приглашённых реферером (getInvestorReferrals, admin), GET /api/admin/referrals/links — Все реферальные ссылки платформы (admin, getReferralLinks) (+125)
- Use Cases (24): UC-ACT-004. Агент/менеджер видит активность инвестора (для карточки лида), UC-CAL-009. Руководитель смотрит календарь команды, UC-CAL-010. Руководитель ПИН смотрит календари консультантов, UC-CHS-001. Создание и публикация проекта застройщиком, UC-IDN-003. Включение двухфакторной аутентификации, UC-IDN-005. Создание роли компании и назначение агенту в scope проекта, UC-IDN-008. Проверка доступа сервисом (internal introspection эффективных прав), UC-MSG-001. Открыть личный чат по поиску пользователя по телефону, UC-MSG-003. Правка сообщения в окне ≤ 60 секунд, UC-MSG-004. Заблокировать пользователя (чёрный список), UC-MSG-005. Сигналинг аудио/видео-звонка, UC-MSG-006. Групповой звонок-конференция в чате сделки (+12)
- События (3): Event Contract: pin.identity.user-access-changed (UserAccessChangedKafkaEvent), Event Contract: pin.news.comment-added (CommentAddedKafkaEvent), Event Contract: pin.profile.verification-completed (VerificationCompletedKafkaEvent)
- Фоновые задачи (1): Background Job: AccessFanOutJob — веерная рассылка UserAccessChangedKafkaEvent при смене состава прав роли
- Отчёты (1): Отчет/Export: dev-stats-export (выгрузка аналитики застройщика)
- scenarios (1): UC-OVR-007. Просмотр каталога «глазами инвестора» (impersonation)
- index.md (16): Сервис Инвестор-Собственник (investor-owner), Calendar Service, Catalog Service (Pin.Catalog), Chessboard Service (Pin.Chessboard), DevStats Service (Pin.DevStats), Handbook Service, Identity Service (Pin.Identity), Messenger Service, News Service (Pin.News), Notifications Service, Profile Service (Pin.Profile), Promotion Service (Pin.Promotion) (+4)
- registries (2): Реестр инвариантов PIN, Реестр сущностей PIN
Связанные документы
- role.md — как permissions собираются в роли и назначаются в scope.
- Владельцы enforcement:
docs/06-services/<context>/каждого из 19 контекстов ссылаются на свои строки каталога в разделах «Актор» api-method-документов. - ADR-0052, ADR-0053, ADR-0057 (контекст
dev-stats).