Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Multi-tenancy in Hibernate 
V
    Опции темы
MisterCleric
Дата 11.5.2011, 18:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Код

create or replace view vagents
as 
SELECT v.*        
  FROM Agents v,
       usersession us,
       Usersdepartmentses ud
 WHERE us.username= ud.username
   AND v.departmentid = ud.departmentid


Где:
1. Usersdepartmentses отделы, на которые есть право доступа у пользователя
2. usersession сессионная временная таблица, куда я укладываю перед выборкой залогиненного пользователя
3. Agents - таблица, на которую мне надо ограничить права доступа.

и того у меня при отукрытии HibernateSession 
вызывается такое(псевдо код):
Код

 insert into usersession set username = :user.login


А потом просто делаю выборку:
Код

select * from vagents



--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
dobrolub
Дата 11.5.2011, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 4
Всего: 16



Views построенные с использованием динамического аттрибута - хорошая идея. Я такую видел в работе, отлично работает.

Дополнительный критерий к вопросу выбора: будут ли запросы аггрегативного характера, охватывающие всю базу? Если да - то, выполнить такой запрос по нескольким схемам потребует специального подхода.
PM   Вверх
Samotnik
Дата 11.5.2011, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



MisterCleric, впечатляет, но есть вопросы
1. Я так понимаю tenant - это user ? Если да, то содержится ли поле user в остальных сущностях ? Если да, то по связи или нет ?
2. Зачем временная таблица с именем залогиненного пользователя?
3. Что такое "отделы, на которые есть право доступа у пользователя" ?
4. Где и когда этот sql код исполнять ?
PM MAIL   Вверх
MisterCleric
Дата 12.5.2011, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет. 
Давай попытаюсь ответить:
Цитата

1. Я так понимаю tenant - это user ? Если да, то содержится ли поле user в остальных сущностях ? Если да, то по связи или нет ?

Это просто привел тебе пример моего кода. Я его не адаптировал под тебя.
Зачем этот твой tenant держать во всех сущностях? Ведь в итоге у теб все-равно будет дерево объектов. И понятно, что всегда можно по внешним ключам добраться до вершины пирамиды - tenant. Что легко можно скрыть в таких вот View.
Цитата

2. Зачем временная таблица с именем залогиненного пользователя?

Потому как каждый пользователь ложа в такую таблицу записи видит только свои. И мне, что понимать на уровне БД, какой пользователь выполняет запросы, достаточно написать так:
Код

select * from usersession 

И сразу же встречный вопрос: как ты будешь понимать какому tenant принадлежит пользователь, который выполняет действие?
Цитата

3. Что такое "отделы, на которые есть право доступа у пользователя" ?

Это такое разграничение прав доступа к данным в моей архитектуре. Суть сводиться к чему: контора, использующая мое приложение, имеет множество отделов по всей стране. Так вот необходимо показывать сделки пользователям строго по их региональной принадлежности. Плюс "объем региональности" растет с приближением к уровню столицы.
Цитата

4. Где и когда этот sql код исполнять ? 

Мой EntityManager имеет TransactionScope. 
Я оборачиваю весь цикл запроса от пользователя в транзакцию. Т.е. у меня это делает seam. И в фильтре перед вызовом бизнес логики у меня стоит вызов INSERT во временную таблицу. Поскольку все дальнейшие действия с БД выполняются в одной БД сессии, то и содержимое этой таблицы доступно везде и оно однозначно.

Удачки тебе


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Samotnik
Дата 15.5.2011, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 5
Всего: 191



MisterCleric, спасибо.
В итоге я добавил во все сущности tenant_id, и при занесении записи в БД, я заношу id того тенанта к которому относится эта запись. Ну а дальше дело техники, создал хибер фильтр, в который в сессию ложу критерий tenant_id. 
Этот способ нормальный ? 
PM MAIL   Вверх
MisterCleric
Дата 16.5.2011, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Цитата

Этот способ нормальный ?  

Да, поскольку его тоже приводят в пример по данной теме


--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0741 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.