Я реализую 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 **, но та же роль может быть применена к ** нескольким ** Пользователям. Роль назначается Права (Разрешения?) ', Снова предполагая, что каждая Роль может иметь ** Несколько ** Разрешений, а также то же Разрешение может быть применено к нескольким Пользователям. – RevXaisks
** РЕДАКТИРОВАТЬ: ** Пожалуйста, подтвердите правильность моих приведенных выше допущений. – RevXaisks
пользователи могут иметь несколько ролей, роли могут иметь несколько разрешений, каждая роль/разрешение могут быть назначены нескольким пользователям/ролям. Я отредактировал мой вопрос выше – Alkahna