Перейти к содержимому


Добавление своих полей в таблицу "Пользователи"

Пользователи

Сообщений в теме: 3

#1 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 23 Июнь 2014 - 11:05

Для более четкого разграничения доступа клиентов к записям в таблицах нужно иметь возможность указывать признаки доступа в свойствах записи таблицы "Пользователи". Для этого к этой таблице должен иметься доступ, как и к любой другой, но с ограничением на удаление системных полей и с разрешением создания и редактирования пользовательских полей. Тогда в фильтре будет достаточно поставить условие сравнения пользовательского поля с контрольным, чтобы отсечь записи, к которым не нужно давать доступ.
Пример. База данных по решениям, принимаемым собственниками помещений в многоквартирном доме. Нужно выводить только записи, касающиеся конкретного собственника. Если ввести в таблице Пользователи поле ссылки на список домов и задать условия на совпадения полей "Адрес дома" в таблице "Решения общих собраний" и "Пользователи", то пользователь будет видеть только решения по дому, в котором он является собственником помещений. Если сделать возможность множественного выбора в этом поле, то по фильтру со свойством "содержит" можно выделить решения по всем домам, где у собственника есть квартиры. Ну это как пример. Кроме того, можно было бы хранить и иные данные, относящиеся к пользователю, либо ссылку на таблицу с ними, чтобы можно было выстраивать условия по соответствию в полях ссылки. То есть можно задать одно дополнительное поле ссылки на произвольную запись вспомогательной системной таблицы "Реквизиты" (например), где можно настраивать структуру как угодно и делать какие угодно ключевые поля, в том числе и для разграничения доступа, а к ним получать доступ по ссылке ['Ссылка']['Поле']. Второй вариант более безопасен, но под него нужно будет немного переписывать фильтры, чтобы можно было делать в режиме помощника выборку необходимого поля по ссылке.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 23 Июнь 2014 - 14:48

Для этого всего в программе уже есть функционал связи с пользователями. Создаете свою таблицу и привязываете ее к системной таблице пользователей, в результате получаете то самое расширение. Причем, в отличии от предложенного вами, таким образом можно привязать несколько таблиц, например Клиенты и Сотрудники в стандартной конфигурации. У них разный набор полей, но в обеих можно добавлять/менять пользователей. К тому же можно выбирать для каждой записи, привязывать ее или нет. Может конечно это и не то что вы хотите, но расширение непосредственно системной таблицы у нас не планируется.

#3 Александр Пономарев

    Активный участник

  • Пользователи
  • PipPipPip
  • 435 сообщений
  • Пол:Мужчина
  • Город:Таганрог

Отправлено 24 Июнь 2014 - 17:29

Это не то. Вы предлагаете закреплять запись за одним хозяином, прописывая его явно. В моем случае у дома несколько собственников и все они должны иметь доступ к решениям собрания этого дома. Их невозможно описать вашими средствами, не указав явно ручками в перечислении условий. При этом в таблице есть ссылка НА пользователя, а в самом пользователе нет ссылки НА таблицу.
Я думал, как проще реализовать задачу и пришел к следующему выводу:
1. Нужно ввести системную таблицу с названием, например "Доступ".
2. В таблице "Пользователи" завести новое поле связи с таблицей "Доступ" с указанием на конкретную запись из этой таблицы, привязанную к данному пользователю.
3. В таблице "Доступ" структура полей определяется самим пользователем. Для каждой таблицы он может делать поле связи с указанием значения, по которому осуществляется фильтрация. Причем выбрать можно несколько значений.
4. В таблицах, к которым нужно разграничивать доступ, заводится поле, являющееся ссылкой на запись поля "Доступ" через таблицу "Пользователи". То есть для каждого конкретного пользователя это значение (значения) подставляются автоматически.
5. В фильтре в качестве условия указывается "Поле Х" в таблице равно или содержит значение "Поля Y" из таблицы "Доступ". По этому фильтру выводятся только те записи, нужное поле которых совпадает с фильтрующим значением.
На мой взгляд это гораздо гибче, нежели то, что сейчас есть у вас и не требует особых изменений в коде.

Заводится новый пользователь - собственник, ему прописывают объекты, связанные с ним. Он имеет доступ к записям, в которых совпадают эти ключевые признаки. И так во многих других задачах.

Сообщение отредактировал Александр Пономарев: 24 Июнь 2014 - 17:32


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 25 Июнь 2014 - 08:39

Что мешает Вам сейчас добавить ту же самую таблицу "Доступ" как не системную и точно также привязать ее к пользователям? В чем разница то? У системных таблиц нет функционала добавления полей, фильтров и т.д., и они скрыты от непосредственного изменения (потому и системные). Никто не будет городить сейчас огород с расширением системных таблиц, так как для этого уже есть пользовательские таблицы. Это кардинальное изменение парадигмы существующей программы, и вовсе не "не требует особых изменений в коде", как вы написали, а как раз таки наоборот. Вся гибкость уже заключена в таблицах конфигурации.

Что же касается фильтров по неким "дополнительным признакам", это в большинстве случаев реализуется через вложенные запросы. Примеры уже приводили на форуме. Например, при необходимости отобрать в некой таблице дома, в которых текущий пользователь является собственником, составляется условие к полю Дом, которое приравнивается к результату запроса из таблицы Собственников (привязанной к пользователям), где уже поле пользователь приравнено к текущему пользователю. Так что проблемы тут нет особо (за исключением того, что такие условия сейчас вручную нужно составлять, но это уже другой вопрос).





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных