powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как спроектировать: разграничение прав двум сущностям
9 сообщений из 9, страница 1 из 1
Как спроектировать: разграничение прав двум сущностям
    #37355518
Доброе утро!

Подскажите, пожалуйста, как решить следующую задачку:
Есть следующие сущности: отделы, сотрудники и документы. Необходимо добавить возможность разграничения прав доступа к документам. Вся проблема в том, что права доступа могут назначаться как отделу так и конкретно сотруднику.

Таблицы прав достаточно вот такой:
Сотрудник/Отдел Документ ПраваВася Приказ №155 ЧтениеПетя Приказ №155 Чтение:Редактирование:УдалениеБухгалтерия Приказ №155 Чтение
В одно поле помещать нельзя, т.к. в данном случае невозможно создать FK.
Никак не могу сообразить как грамотно решить данную задачку.

Есть правда идея(наверняка бред):
Создать общую таблицу для сущностей отделы и сотрудники, а в них проставить внешний ключ на эту таблицу(нечто супертипа).
И в таблице прав создать поле с внешним ключом на эту таблицу.
...
Рейтинг: 0 / 0
Как спроектировать: разграничение прав двум сущностям
    #37355579
8765432
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
права: 100 - чтение
права: 111 - чтение редактирование удаление
права: 011 - редактирование удаление
права: 101 - чтение удаление

и т.д.
...
Рейтинг: 0 / 0
Как спроектировать: разграничение прав двум сущностям
    #37355622
8765432права: 100 - чтение
права: 111 - чтение редактирование удаление
права: 011 - редактирование удаление
права: 101 - чтение удаление
и т.д.
Проблема в другом. Мне нужно создать структуру для того, чтобы можно было раздавать права и отделам и сотрудникам (в одной таблице?).
И еще : У документов есть атрибут "ответственный", значением которого может быть как сотрудник так и отдел. На какую таблицу сделать FK в данном случае?
...
Рейтинг: 0 / 0
Как спроектировать: разграничение прав двум сущностям
    #37355756
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответственный отдел - это интересное извращение :)

Надо смотреть полную задачу по месту. Описанный фрагмент делается так:

1. У сотрудника для каждой операции есть три варианта настройки: "может", "не может", "как у отдела" (по умолчанию).
2. Развязки сотрудники-документы, отделы-документы.
...
Рейтинг: 0 / 0
Как спроектировать: разграничение прав двум сущностям
    #37355924
softwarer2. Развязки сотрудники-документы, отделы-документы.
2 таблицы?
А если сделать одну:
Сотрудник Отдел Документ ПраваВасяNULL Приказ №155 ЧтениеПетяNULL Приказ №155 Чтение:Редактирование:УдалениеNULL Бухгалтерия Приказ №155 Чтение
Ведь это по сути тоже самое, только объединенное в одну таблицу, в чем смысл разделять их на две таблицы?


softwarerОтветственный отдел - это интересное извращение :)

Хорошо, тогда допустим не отдел, а рабочая группа.
Создается рабочие группы, в которые может входить 1..N сотрудников. Ответственным за документ может быть или сотрудник или рабочая группа. Как в этом случае быть? Тоже создавать N-ное количество развязок, в зависимости от количества типов сущностей ответственных за документ? И в документе атрибут "Ответственный" необходимо убрать?
...
Рейтинг: 0 / 0
Как спроектировать: разграничение прав двум сущностям
    #37355947
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лето - прекрасная пораВедь это по сути тоже самое, только объединенное в одну таблицу, в чем смысл разделять их на две таблицы?
Если по теории, то в большей нормализации. А если по практике - безопасность и права доступа склонны часто переделываться, разрастаться и запутываться. "Лишняя таблица" нам практически ничего не стоит, а вот "брррр... ужас" появится в результате позже и меньше.

Лето - прекрасная пораХорошо, тогда допустим не отдел, а рабочая группа. Создается рабочие группы, в которые может входить 1..N сотрудников.
У рабочей группы должен быть руководитель. Я бы постарался повесить документы на него и дать право перевесить на сотрудника группы. "Групповая ответственность" - бессмысленное понятие.
...
Рейтинг: 0 / 0
Как спроектировать: разграничение прав двум сущностям
    #37356274
softwarer,

Да, в случае с групповой ответственностью получается не очень хорошо - Отвечают все, а значит никто.

Но все же, если не учитывать этот момент и рассматривать рабочую группу и сотрудников не как "ответственный", а допустим "Разработчик ПО". И по условию задачи разработчиком ПО может быть или группа разработчиков(у нее есть свое название) или конкретный человек. Группа разработчиков не является ни юр. лицом ни чем либо другим, просто группа.

И нам нужно установить соответствие между разработчиком и ПО. У сущности ПО есть атрибут "Разработчик". Как в данном случае поступить?

Создавать две таблицы "Групповая разработка", "Персональная разработка"?

Или создать супертип "Разработчик" и два подтипа Групповая разработка", "Персональная разработка". И в дальнейшем ссылаться на таблицу "Разработчик"?

И вообще как поступать в подобных случаях, когда в качестве значения атрибута могут выступать разные сущности?
...
Рейтинг: 0 / 0
Как спроектировать: разграничение прав двум сущностям
    #37356361
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лето - прекрасная пораИ нам нужно установить соответствие между разработчиком и ПО. У сущности ПО есть атрибут "Разработчик". Как в данном случае поступить?
Сделать многие-ко-многим между ПО и программистом. Персональная разработка - это частный случай групповой :)

Лето - прекрасная пораИ вообще как поступать в подобных случаях, когда в качестве значения атрибута могут выступать разные сущности?
Если бы был один хороший рецепт... Всё, что Вы называете, лучше в одних случаях и хуже в других. Главное не выдумывать велосипедов типа "ссылок на все таблицы", имхо.
...
Рейтинг: 0 / 0
Как спроектировать: разграничение прав двум сущностям
    #37356930
softwarer,

Большое спасибо Вам за помощь!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как спроектировать: разграничение прав двум сущностям
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]