Какие таблицы базы данных требует Apache Shiro? - PullRequest
11 голосов
/ 30 марта 2011

Я хочу использовать Apache Shiro и MySQL для моего Царства. В каких таблицах и полях должен работать Широ?

Ответы [ 3 ]

16 голосов
/ 30 марта 2011

Широ не требует таблиц базы данных для работы.Пользователи Shiro могут использовать любое хранилище данных, которое они хотят моделировать или управлять пользователями, группами, разрешениями и т. Д.

Ответственность Shiro Realm заключается в том, чтобы служить мостом для ваших данных (однако выхотите представить это) и вернуть его в формате, понятном Широ.

Поскольку Широ не навязывает вам модель данных, это то, что позволяет ему работать с таким большим количеством бэкэндов (LDAP, Active Directory, RDBMS)., Файловая система и т. Д.).

Если вы хотите использовать СУБД в качестве резервного хранилища данных, посмотрите исходный код Shiro JdbcRealm , чтобы дать вам представление о том, как могут выглядеть ваши таблицы.,Это всего лишь пример, хотя.Вы можете иметь любую структуру таблицы, какую пожелаете.

6 голосов
/ 30 декабря 2011

как я понял, требуется всего 3 у меня есть 3 таблицы и 2 представления, которые я использую в качестве источника данных для платформы. У меня есть это на Postgresql, но вы можете адаптировать его для использования в других БД.

попробуйте это

CREATE SCHEMA app;

CREATE TABLE app.sec_permissions ( 
    permission_id int4 NOT NULL,
    permission_name varchar( 64 ) NOT NULL,
    role_id int4 NOT NULL,
CONSTRAINT pk_sec_permissions PRIMARY KEY ( permission_id ),
CONSTRAINT idx_sec_permissions_unq_name UNIQUE ( permission_name )
 );

CREATE INDEX idx_sec_permissions ON app.sec_permissions ( role_id );

CREATE TABLE app.sec_roles ( 
    role_id int4 NOT NULL,
    role_name varchar( 32 ) NOT NULL,
    user_id int4 NOT NULL,
CONSTRAINT pk_sec_roles_0 PRIMARY KEY ( role_id ),
CONSTRAINT idx_sec_roles_unq_name UNIQUE ( role_name )
 );

CREATE INDEX idx_sec_roles ON app.sec_roles ( user_id );

CREATE TABLE app.sec_users ( 
    user_id int4 NOT NULL,
    user_loginname varchar( 32 ) NOT NULL,
    user_password varchar( 254 ) NOT NULL,
    user_passsalt varchar( 254 ) NOT NULL,
CONSTRAINT pk_sec_users PRIMARY KEY ( user_id ),
CONSTRAINT idx_sec_users_unq_loginname UNIQUE ( user_loginname )
 )
;

ALTER TABLE app.sec_permissions ADD CONSTRAINT fk_sec_permissions FOREIGN KEY ( role_id ) REFERENCES app.sec_roles( role_id ) ON DELETE CASCADE ON UPDATE CASCADE
;

ALTER TABLE app.sec_roles ADD CONSTRAINT fk_sec_roles FOREIGN KEY ( user_id ) REFERENCES app.sec_users( user_id ) ON DELETE CASCADE ON UPDATE CASCADE
;

CREATE VIEW app.sec_loginname_roles AS SELECT 
  su.user_loginname
, su.user_password
, su.user_passsalt
, sr.role_name

FROM 
app.sec_users su 
    INNER JOIN app.sec_roles sr 
    ON 
           ( su.user_id = sr.user_id  );

CREATE VIEW app.sec_role_permissions AS SELECT sr.role_name, sp.permission_name
FROM app.sec_roles sr 
    INNER JOIN app.sec_permissions sp ON ( sr.role_id = sp.role_id  );

если вы нашли что-то не так, пожалуйста, напишите обратно

1 голос
/ 30 марта 2011

Небольшая страница быстрого запуска Широ и Страница документации Realm вообще ничего не говорит о MySQL или базах данных. Исходя из этого, не похоже, что какие-то конкретные таблицы требуются .

...