|
|
|
Как спроектировать: разграничение прав двум сущностям
|
|||
|---|---|---|---|
|
#18+
Доброе утро! Подскажите, пожалуйста, как решить следующую задачку: Есть следующие сущности: отделы, сотрудники и документы. Необходимо добавить возможность разграничения прав доступа к документам. Вся проблема в том, что права доступа могут назначаться как отделу так и конкретно сотруднику. Таблицы прав достаточно вот такой: Сотрудник/Отдел Документ ПраваВася Приказ №155 ЧтениеПетя Приказ №155 Чтение:Редактирование:УдалениеБухгалтерия Приказ №155 Чтение В одно поле помещать нельзя, т.к. в данном случае невозможно создать FK. Никак не могу сообразить как грамотно решить данную задачку. Есть правда идея(наверняка бред): Создать общую таблицу для сущностей отделы и сотрудники, а в них проставить внешний ключ на эту таблицу(нечто супертипа). И в таблице прав создать поле с внешним ключом на эту таблицу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 10:15 |
|
||
|
Как спроектировать: разграничение прав двум сущностям
|
|||
|---|---|---|---|
|
#18+
права: 100 - чтение права: 111 - чтение редактирование удаление права: 011 - редактирование удаление права: 101 - чтение удаление и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 11:03 |
|
||
|
Как спроектировать: разграничение прав двум сущностям
|
|||
|---|---|---|---|
|
#18+
8765432права: 100 - чтение права: 111 - чтение редактирование удаление права: 011 - редактирование удаление права: 101 - чтение удаление и т.д. Проблема в другом. Мне нужно создать структуру для того, чтобы можно было раздавать права и отделам и сотрудникам (в одной таблице?). И еще : У документов есть атрибут "ответственный", значением которого может быть как сотрудник так и отдел. На какую таблицу сделать FK в данном случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 11:29 |
|
||
|
Как спроектировать: разграничение прав двум сущностям
|
|||
|---|---|---|---|
|
#18+
Ответственный отдел - это интересное извращение :) Надо смотреть полную задачу по месту. Описанный фрагмент делается так: 1. У сотрудника для каждой операции есть три варианта настройки: "может", "не может", "как у отдела" (по умолчанию). 2. Развязки сотрудники-документы, отделы-документы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 12:38 |
|
||
|
Как спроектировать: разграничение прав двум сущностям
|
|||
|---|---|---|---|
|
#18+
softwarer2. Развязки сотрудники-документы, отделы-документы. 2 таблицы? А если сделать одну: Сотрудник Отдел Документ ПраваВасяNULL Приказ №155 ЧтениеПетяNULL Приказ №155 Чтение:Редактирование:УдалениеNULL Бухгалтерия Приказ №155 Чтение Ведь это по сути тоже самое, только объединенное в одну таблицу, в чем смысл разделять их на две таблицы? softwarerОтветственный отдел - это интересное извращение :) Хорошо, тогда допустим не отдел, а рабочая группа. Создается рабочие группы, в которые может входить 1..N сотрудников. Ответственным за документ может быть или сотрудник или рабочая группа. Как в этом случае быть? Тоже создавать N-ное количество развязок, в зависимости от количества типов сущностей ответственных за документ? И в документе атрибут "Ответственный" необходимо убрать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 14:06 |
|
||
|
Как спроектировать: разграничение прав двум сущностям
|
|||
|---|---|---|---|
|
#18+
Лето - прекрасная пораВедь это по сути тоже самое, только объединенное в одну таблицу, в чем смысл разделять их на две таблицы? Если по теории, то в большей нормализации. А если по практике - безопасность и права доступа склонны часто переделываться, разрастаться и запутываться. "Лишняя таблица" нам практически ничего не стоит, а вот "брррр... ужас" появится в результате позже и меньше. Лето - прекрасная пораХорошо, тогда допустим не отдел, а рабочая группа. Создается рабочие группы, в которые может входить 1..N сотрудников. У рабочей группы должен быть руководитель. Я бы постарался повесить документы на него и дать право перевесить на сотрудника группы. "Групповая ответственность" - бессмысленное понятие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 14:18 |
|
||
|
Как спроектировать: разграничение прав двум сущностям
|
|||
|---|---|---|---|
|
#18+
softwarer, Да, в случае с групповой ответственностью получается не очень хорошо - Отвечают все, а значит никто. Но все же, если не учитывать этот момент и рассматривать рабочую группу и сотрудников не как "ответственный", а допустим "Разработчик ПО". И по условию задачи разработчиком ПО может быть или группа разработчиков(у нее есть свое название) или конкретный человек. Группа разработчиков не является ни юр. лицом ни чем либо другим, просто группа. И нам нужно установить соответствие между разработчиком и ПО. У сущности ПО есть атрибут "Разработчик". Как в данном случае поступить? Создавать две таблицы "Групповая разработка", "Персональная разработка"? Или создать супертип "Разработчик" и два подтипа Групповая разработка", "Персональная разработка". И в дальнейшем ссылаться на таблицу "Разработчик"? И вообще как поступать в подобных случаях, когда в качестве значения атрибута могут выступать разные сущности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 16:42 |
|
||
|
Как спроектировать: разграничение прав двум сущностям
|
|||
|---|---|---|---|
|
#18+
Лето - прекрасная пораИ нам нужно установить соответствие между разработчиком и ПО. У сущности ПО есть атрибут "Разработчик". Как в данном случае поступить? Сделать многие-ко-многим между ПО и программистом. Персональная разработка - это частный случай групповой :) Лето - прекрасная пораИ вообще как поступать в подобных случаях, когда в качестве значения атрибута могут выступать разные сущности? Если бы был один хороший рецепт... Всё, что Вы называете, лучше в одних случаях и хуже в других. Главное не выдумывать велосипедов типа "ссылок на все таблицы", имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.07.2011, 17:14 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37356361&tid=1542085]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
34ms |
get tp. blocked users: |
1ms |
| others: | 257ms |
| total: | 503ms |

| 0 / 0 |
