Пусть есть какая-то фирма по производству софта. Одновременно ведётся три проекта, над каждым проектом совместно трудятся дизайнер, программист и менеджер. И представители соответствующих специальностей периодически устраивают летучки с обсуждением вопросов своего ремесла.
Всего объектов к которым необходимо определить доступ девять. Они могут быть сгруппированы по двум признакам: по принадлежности к проекту и по принадлежности с типу документа (эскиз, программа, отчёт).
- Код: Выделить всё
Файлы ¦ Дизайнеров (Д) ¦ Кодеров (К) ¦ Менеджеров (М)
------------------------------------------------------------------
проекта А (АА) ¦ ДА ¦ КА ¦ МА
проекта В (ВВ) ¦ ДВ ¦ КВ ¦ МВ
проекта С (СС) ¦ ДС ¦ КС ¦ МС
Права будем давать не каждому пользователю, а группе.
- Код: Выделить всё
Все сотрудники [DENY: ALL] (запретить: все)
+-Разработчики проекта А [ALLOW: АA] (разрешить: все файлы проекта А)
¦ +-Дизайнер А
¦ +-Программист А
¦ +-Менеджер А
+-Разработчики проекта B [ALLOW: ВB] (разрешить: все файлы проекта B)
¦ +-Дизайнер B
¦ +-Программист B
¦ +-Менеджер B
+-Разработчики проекта C [ALLOW: СC] (разрешить: все файлы проекта C)
¦ +-Дизайнер C
¦ +-Программист C
¦ +-Менеджер C
+-Менеджеры [ALLOW: М] (разрешить: все отчёты всех проектов)
¦ +-Менеджер A
¦ +-Менеджер B
¦ +-Менеджер C
+-Дизайнеры [ALLOW: Д] (разрешить: все эскизы всех проектов)
¦ +-Дизайнер A
¦ +-Дизайнер B
¦ +-Дизайнер C
+-Программисты [ALLOW: К] (разрешить: все программы всех проектов)
¦ +-Программист A
¦ +-Программист В
¦ +-Программист С
Здесь всё с правами ясно и понятно.
Теперь предположим, что проект В засекретили. Как должны распределиться права?
Мой вариант:
- Код: Выделить всё
Все сотрудники [DENY: ALL] (запретить: все)
+-Разработчики проекта А [ALLOW: АA] (разрешить: все файлы проекта А)
+-Разработчики проекта B [ALLOW: ВB] (разрешить: все файлы проекта B)
+-Разработчики проекта C [ALLOW: СC] (разрешить: все файлы проекта C)
+-Менеджеры [ALLOW: М, DENY: BB] (разрешить: все отчёты всех проектов, запретить: все файлы проекта В)
+-Дизайнеры [ALLOW: Д, DENY: BB] (разрешить: все эскизы всех проектов, запретить: все файлы проекта В)
+-Программисты [ALLOW: К, DENY: BB] (разрешить: все программы всех проектов, запретить: все файлы проекта В)
Теперь появилась неоднозначность. Например для дизайнера В, с одной стороны доступ разрешён, т.к. он входит в группу "Разработчики проекта B", с другой - запрещён, т.к. он входит в группу "Дизайнеры". Если считать, что приоритет запрета выше приоритета разрешения, то в итоге Дизайнер В не получит доступа к файлам группы В. То же самое можно сказать и по отношению Программист В и Менеджер В. Как решаются подобные конфликты?
Кроме того, если групп много и их вот так как в примере не охватить одним взглядом, то можно запросто пропустить группу которой нужно запретить доступ к документам проекта В.