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


Права доступа: доступ в зависимости от значений

права доступа

В теме одно сообщение

#1 anton

    Участник

  • Пользователи
  • PipPip
  • 11 сообщений

Отправлено 27 Апрель 2012 - 15:17

ClientBase 1.9.5, лицензия

Условия задачи:
Есть несколько офисов в разных городах и регионах. Каждый офис должен иметь доступ только к той информации которая касается его. Т.е. офис в Самаре должен видеть только то что наработали они и не иметь доступа к тому, что было наработано, скажем, в Новосибирске. Впрочем, может быть головной офис региона, который должен иметь доступ ко всем записям офисов своего региона. Плюс, решение должно предусматривать наличие возможности просмотра всех записей для специального, не административного аккаунта. А также должно предусматривать возможность ещё одного слоя доступа - стран.
В базе, разумеется, есть справочники городов, регионов и стран.

Получается, что каждому клиенту, договору и т.п. должна выдаваться "прописка", причём варианты "прописки" должны коррелироваться с правами доступа(т.е. менеджер может иметь доступ в два города, выбор должен быть только из этих двух городов).



Логично было бы сделать подобный доступ группами, что позволило бы группировать группы доступа городов в группы доступа регионов. Однако там я не нашёл как настроить доступ по условию.


Ну и собственно вопрос. Как всё это описанное реализовать? Возможно ли это реализовать самостоятельно или необходимо обращаться к вам за доработкой?

#2 Zver

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

  • Пользователи
  • PipPipPip
  • 80 сообщений

Отправлено 24 Май 2012 - 05:24

Я реализовал это следующим образом:
Создал таблицу "Сотрудник-Филиал" с полями (ID-сотрудника и ID-Филиала)
В таблице и в которой надо разграничить доступ добавил поле "Филиал".
И после этого можно создать фильтр:

Все записи (доступные этому пользователю): `Филиал` in (select f1688 from cb_data141 a join cb_data46 b on a.f1687=b.id where b.f1489='{current}')
Клиенты в стадии проинформирован (доступные этому пользователю)`Филиал` in (select f1688 from cb_data141 a join cb_data46 b on a.f1687=b.id where b.f1489='{current}') and `Стадия`='Проинформирован'
и т.д.

cb_data141 - Таблица "Сотрудник-Филиал"
cb_data46 - Таблица "Сотрудники"
f1688 - Поле ID-Филиала
f1489 - ID пользователя

Наличие таблицы "Сотрудник-Филиал" дает возможность назначить одному пользователю/сотруднику назначать несколько Филиалов (Директор, Гл. бухгалтер и т.д.).





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

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