2015-12-07 3 views
0

Я реализую Apache Shiro в своем веб-приложении и у меня возникают проблемы с запуском.Apache Shiro - пользовательский jdbc Realm - роли для чтения/разрешений

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

Моя роль-правой системы состоит из следующих действий:

пользователя -> имеет ролей (несколько возможно)

Роль -> имеет права (возможно несколько)

Роли могут быть назначены Несколько пользователей & права могут быть назначены несколько ролей

назначение пользователя роли всегда связанно с двумя другими условиями:

  • Организационная единица (называется OE в моем случае)
  • Факультет

Поэтому в основном пользователя "Факультет-Admin" может иметь следующее:

  • Роль OE-Admin с все права для OE: 3 и факультета: сотрудники

, чтобы он мог позволяет сказать «manage_Users» факультетским «сотрудники» ОГО «3»

Я знаю, как реализовать роли в файле siro.ini, но поскольку у меня есть свои роли/права (разрешения) внутри базы данных, мне нужно, чтобы они загружались оттуда.

В примере быстрого старта из Shiro есть следующий пример:

# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with 
# license plate 'eagle5' (instance specific id) 
goodguy = winnebago:drive:eagle5 

Если взять этот пример и применить его к моей ситуации я получаю следующее:

# The 'OE-Admin' role is allowed to 'manage_users' of OE '3' (type) with 
# faculty 'staff' 
OE-Admin = 3:manage_users:staff 

поэтому у меня есть мой определение роли:

Роль = OE: Вправо: Факультет (или изменить их в порядке, действительно на самом деле)

Теперь большой вопрос: как я могу «загрузить» свои роли/права из своей базы данных, чтобы получить даже этот заявленный формат роли с ее разрешениями?

До сих пор я следующие внутри shiro.ini:

ds = org.postgresql.Driver 
ds.serverName = localhost 
ds.user = admin 
ds.password = admin 
ds.databaseName = db_name 
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm 
jdbcRealm.dataSource = $ds 
jdbcRealm.permissionsLookupEnabled = true 

Я знаю, что должна быть запись, как «jdbcRealm.userRolesQuery = SELECT, ....» , но я не знаю, как роль нагрузки как я сказал выше.

Это просто запись в INI-файл, который будет эквивалентен статической роли установить так: goodguy = Виннебаго: привод: eagle5

или какие шаги nessecary для достижения этой цели?

Any1 получил больше опыта с Apache Shiro, который мог бы помочь мне? Есть несколько учебных пособий, но мне очень сложно следить за ними, чтобы создать пользовательскую область jdbc с ролями owm. & разрешения.

EDIT: Структура базы данных:

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

id serial NOT NULL, 
"user" character varying(50) NOT NULL, 
CONSTRAINT umgmt_users_pkey PRIMARY KEY (id) 

Роли:

id serial NOT NULL, 
role character varying(50) NOT NULL, 
priv_level integer NOT NULL, 
CONSTRAINT umgmt_roles_pkey PRIMARY KEY (id) 

прав (разрешений):

id serial NOT NULL, 
"right" character varying(50) NOT NULL, 
CONSTRAINT umgmt_rights_pkey PRIMARY KEY (id) 

и только в том случае, это мой стол, где я храню User-Role-OE-Fac Отношения

id serial NOT NULL, 
user_id integer NOT NULL, 
oe_id integer NOT NULL, 
fac_id integer NOT NULL, 
role_id integer NOT NULL, 
assigned_by_priv_level integer NOT NULL, 
CONSTRAINT umgmt_user_oe_fac_role_pkey PRIMARY KEY (id), 
CONSTRAINT fac_fkey FOREIGN KEY (fac_id) 
    REFERENCES umgmt_facultys (id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION, 
CONSTRAINT oe_fkey FOREIGN KEY (oe_id) 
    REFERENCES umgmt_oes (id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION, 
CONSTRAINT role_fkey FOREIGN KEY (role_id) 
    REFERENCES umgmt_roles (id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION, 
CONSTRAINT user_fkey FOREIGN KEY (user_id) 
    REFERENCES umgmt_users (id) MATCH SIMPLE 
    ON UPDATE NO ACTION ON DELETE NO ACTION 
+1

Очень хороший вопрос. Вообще-то меня беспокоило что-то подобное несколько недель назад. Позвольте мне прежде всего попытаться понять ваше решение: «Пользователям назначаются роли», я предполагаю, что у каждого пользователя есть только ** Роль 1 **, но та же роль может быть применена к ** нескольким ** Пользователям. Роль назначается Права (Разрешения?) ', Снова предполагая, что каждая Роль может иметь ** Несколько ** Разрешений, а также то же Разрешение может быть применено к нескольким Пользователям. – RevXaisks

+1

** РЕДАКТИРОВАТЬ: ** Пожалуйста, подтвердите правильность моих приведенных выше допущений. – RevXaisks

+0

пользователи могут иметь несколько ролей, роли могут иметь несколько разрешений, каждая роль/разрешение могут быть назначены нескольким пользователям/ролям. Я отредактировал мой вопрос выше – Alkahna

ответ

0

нормально после долгого обсуждения с RevXaisks я буду спать еще одну ночь над этим, но я думаю, что Широ не соответствуют моим потребностям в плане проверок Role/Permisson. Спасибо большое, как вы были так терпеливы.

Смежные вопросы