Глава 8. Публикация объекта
Мы уже различаем объект, отношения и основания доступа.
Но остаётся ещё один важный вопрос:
Как объект вообще становится доступным другим участникам системы?
Владелец может существовать.
Группа может существовать.
Роль может быть назначена.
Но объект может оставаться недоступным для остальных.
Значит, между существованием объекта и возможностью работать с ним есть ещё одно отношение.
Это отношение можно назвать публикацией.
8.1. Объект может существовать, оставаясь невидимым
Предположим, Alice создаёт документ D.
Документ существует:
Alice → created → D
Alice может иметь над ним необходимые права.
Но Bob пока ничего о D не знает и не имеет основания его видеть.
Это нормальная ситуация.
Объект может находиться в системе, но не входить в доступную Bob область объектов.
Поэтому:
Object exists ≠ Object is visible
А тем более:
Object exists ≠ User can use Object
8.2. Публикация меняет область видимости объекта
Предположим, Alice публикует D для проекта P:
D → published_in → P
Теперь D связан с новой областью.
Если Bob является участником P, у него появляется основание рассматривать D как потенциально доступный объект.
Но это ещё не обязательно означает, что Bob может выполнять любое действие над D.
Здесь важно сохранить два разных вопроса:
Где объект опубликован?
и:
Что конкретный субъект может с ним делать?
8.3. Публикация — это отношение
Публикация не является свойством пользователя.
Она также не является просто свойством объекта.
Это отношение:
Object → Publication → Area
Например:
Document D
│
▼
published
│
▼
Project P
Изменение публикации меняет отношения объекта с остальной системой.
Сам документ при этом может вообще не измениться.
8.4. Публикация не равна передаче владения
Предположим:
Alice → owns → D
и:
D → published_in → P
После публикации Alice не перестаёт быть владельцем.
Публикация создаёт дополнительное отношение.
Получается:
Alice ──owns──────→ D
D ──published─→ P
Поэтому:
Publication ≠ Ownership
Это особенно важно в системах совместной работы.
Владелец сохраняет своё отношение к объекту, одновременно открывая объект для определённой области.
8.5. Публикация не равна разрешению
Это ещё более важное различие.
Пусть:
D → published_in → P
Сам факт публикации не отвечает на вопрос:
Can(Bob, UPDATE, D)
Он говорит только, что D опубликован в P.
Чтобы определить действие Bob, нужно учитывать дополнительные отношения:
Bob
↓
relation with P
↓
D published in P
↓
access rules
↓
Can(Bob, Action, D)
Поэтому:
Publication ≠ Permission
Публикация может быть основанием для дальнейшего определения доступа, но не является универсальным разрешением.
8.6. Видимость и право действия — разные вопросы
Это различие можно выразить двумя вопросами.
Вопрос 1:
Может ли субъект обнаружить или рассматривать объект как доступный ему?
Вопрос 2:
Может ли субъект выполнить конкретное действие над объектом?
Например, Bob может видеть документ, но не иметь права изменять его.
Или может иметь право читать документ, но не утверждать его.
Поэтому:
Visibility
≠
Permission
Хотя видимость может быть одним из необходимых условий для последующего действия.
8.7. Публикация создаёт связь объекта с областью
Объект может быть опубликован не только в одной области.
Например:
D
├── published in P1
├── published in P2
└── published in G1
Это означает, что у объекта существует несколько независимых публикационных отношений.
Каждое из них может иметь собственные последствия.
Поэтому модель:
Object → one Scope
уже здесь оказывается слишком простой.
8.8. Разные публикации могут открывать объект разным субъектам
Пусть:
D → published_in → Project P
D → published_in → Group G
Bob может быть связан с P, но не с G.
Carol может быть связана с G, но не с P.
Оба субъекта работают с одним объектом, но приходят к нему через разные отношения.
Bob → P ──→ D
Carol → G ──→ D
Это хороший пример того, почему доступ нельзя свести к одному свойству объекта.
8.9. Публикация может быть отозвана
Публикация — не обязательно постоянное состояние.
Если:
D → published_in → P
отношение может быть удалено:
D ↛ P
После этого объект продолжает существовать.
Владелец может продолжать иметь к нему доступ.
Другие субъекты могут потерять доступ, если публикация была их основанием.
То есть:
изменился publication relation
↓
изменился набор релевантных фактов
↓
может измениться доступ
Сам объект при этом не менялся.
8.10. Публикация может иметь несколько уровней
Не всегда объект публикуется непосредственно пользователю.
Можно публиковать объект:
-
организации;
-
проекту;
-
группе;
-
другой области предметной модели.
Затем субъект получает отношение с этой областью.
Например:
D
↓
published in
↓
Project P
↓
member
↓
Bob
В этом случае связь Bob с D является не прямой, а производной.
Она возникает из нескольких исходных отношений.
8.11. Публикация и прямой доступ — разные основания
У пользователя может быть прямое право на объект независимо от публикации.
Например:
Bob → READ → D
Даже если D не опубликован в проекте, прямое основание может предоставить Bob доступ.
В другой модели публикация может быть обязательным условием.
Поэтому нельзя считать публикацию единственным способом получить доступ.
Она является одним из механизмов связывания объекта с областью субъектов.
8.12. Публикация не обязательно означает публичность
Слово «публикация» легко понять как:
сделать объект доступным всем.
В модели доступа это не обязательно так.
Можно опубликовать объект:
-
только внутри организации;
-
только участникам проекта;
-
только членам группы;
-
только в определённой области системы.
Поэтому публикация означает не «сделать публичным», а:
создать отношение, благодаря которому объект входит в определённую область видимости.
8.13. Публикация связывает объект с контекстом
До публикации мы могли рассматривать:
Object D
После публикации появляется новый факт:
D → published_in → P
Если субъект Alice имеет отношение к P, в контексте запроса появляется дополнительная информация:
Alice → relation → P
D → published → P
Теперь эти два факта могут использоваться правилом доступа.
То есть публикация не является самим контекстом.
Она добавляет в контекст определённое отношение.
8.14. Один объект — несколько путей видимости
Пусть D опубликован одновременно в проекте и группе:
D → P
D → G
А Alice связана и с P, и с G.
Тогда доступ к D может иметь два основания:
Alice → P → D
Alice → G → D
Если одно отношение исчезнет, второе может сохраниться.
Это означает, что эффективное право может быть устойчивым к изменению одного из оснований.
Так мы снова приходим к различию между:
основанием доступа
и:
эффективным разрешением.
8.15. Публикация может быть частью жизненного цикла доступа
В некоторых системах объект проходит последовательность:
создан
↓
доступен владельцу
↓
опубликован
↓
доступен определённой области
↓
публикация изменена или отозвана
↓
область доступа изменилась
Важно, что публикация не обязательно меняет сам объект как предметную сущность.
Она изменяет его положение относительно других субъектов.
Это ещё один пример того, как безопасность живёт в отношениях вокруг объекта.
8.16. Публикация не должна смешиваться с физическим размещением
Объект может физически находиться в одном хранилище, но быть опубликованным в нескольких областях.
И наоборот, физическое нахождение объекта в некоторой структуре ещё не означает, что эта структура является областью его доступа.
Поэтому:
Physical Location ≠ Publication Scope
То, где объект хранится, и то, кому он опубликован, — разные архитектурные вопросы.
Это особенно важно в распределённых системах, где физическое размещение может определяться производительностью, репликацией или другими техническими причинами.
8.17. Что теперь добавилось к модели
После этой главы у нас есть ещё один элемент:
Object
↓
Publication
↓
Area
Он соединяется с тем, что мы уже знаем:
Subject
↓
Relations
↓
Area
Object
↓
Publication
↓
Area
И из пересечения этих отношений могут возникать основания доступа.
Но сама область всё ещё не объясняет всю ситуацию.
Остаётся разобраться, как именно область действия отношения влияет на разрешение и почему разные отношения могут действовать в разных границах.
8.18. Главный вывод
Публикация отделяет существование объекта от его доступности в определённой области.
Она:
-
не меняет идентичность объекта;
-
не обязательно меняет владельца;
-
не является сама по себе разрешением;
-
может быть одним из оснований доступа;
-
может существовать в нескольких вариантах;
-
может быть изменена или отозвана независимо от объекта.
Упрощённо:
Object
↓
Publication
↓
Area
↓
Relations with Subject
↓
Access Decision
Но здесь возникает следующий вопрос:
Если отношения действуют в разных областях, как определить границу их действия и что происходит, когда таких границ несколько?
Именно это приводит нас к следующей главе — области действия отношений.