2011-03-30 122 views

回答

16

四郎不需要數據庫表的功​​能。 Shiro用戶可以使用任何他們想要的數據存儲來模擬或管理用戶,組,權限等。

這是Shiro Realm的責任,充當您的數據的橋樑(但您想要表示它)並返回它以Shiro理解的格式。

因爲四郎不會再對你的數據模型,這是什麼使得它有這麼多的後端(LDAP,Active Directory中,RDBMS,文件系統等)的工作。

如果您想使用RDBMS作爲您的後備數據存儲,請查看Shiro的JdbcRealm源代碼,以便您瞭解您的表的外觀。這只是一個例子。你可以有任何你想要的表格結構。

+0

這個答案的確聽起來不錯,但並沒有回答這個問題。例如,一組創建語句將是更好的答案。 – 2014-08-28 13:00:25

2

Shiro的quick startup pageRealm documentation page的一撇子根本沒有提到有關MySQL或數據庫的任何信息。在此基礎上,它似乎並不像任何特定的表是需要

+0

需要以某種方式創建的表。 – 2014-08-28 13:02:16

6

據我所知,只需要3 我有3個表和我作爲框架數據的源使用2次。 我有這樣的一個PostgreSQL,但你能適應它在其他DBS使用。

試試這個

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 ); 

,如果你發現有什麼錯誤,請回來後