Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Глава 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

Но здесь возникает следующий вопрос:

Если отношения действуют в разных областях, как определить границу их действия и что происходит, когда таких границ несколько?

Именно это приводит нас к следующей главе — области действия отношений.