4

エンティティ ユーザーと権限を使用してデータベースを構築しました

ユーザー (id、電子メール、パスワード、権限) 権限 (id、create_user、delete_user、user_fk)

create_user と delete_user は BOOLEAN です。

関係: ワンワン

これで、すべてのユーザーが独自の権限を持つことができます。

私の質問は: shiro を使用してデータベースからアクセス許可を読み取るにはどうすればよいですか?

4

2 に答える 2

5

本当にユーザー レベルでのみアクセス許可を割り当てたい場合は、ロール テーブルを "偽造" して Shiro を満足させることができます。

Wouter が述べたように、 を使用してJdbcRealm、テーブルのセットアップに 3 つのクエリを指定します。この構造を持つように許可テーブルを変更する必要があります。

permission (id, permissionname, user_fk)

次に、必要に応じて create_user/delete_user 権限の行を挿入します。このようにして、db スキーマを変更する必要なく、セットアップに別の権限 (reset_password など) を簡単に追加できます。

shiro.ini (または shiro 構成ファイルの呼び出し方法) で:

jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm

クエリの場合、次を使用します。

jdbcRealm.authenticationQuery = select password from user where email=?
jdbcRealm.userRolesQuery = select id from user where email=?
jdbcRealm.authenticationQuery = select permissionname from permission where user_fk=?

セットアップの小さなトリックは、役割がまったくないため、ユーザーの ID を役割名として返すだけです。パーミッション テーブルのルックアップが完了すると、ロール名 (=user pk) が使用され、関連付けられたパーミッションが返されます。

于 2013-11-03T13:23:52.037 に答える
4

.ini ファイルで JdbcReam を構成する必要があります。

jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm

shiro クエリに準拠するようにスキーマを変更する場合、追加の構成は必要ありません。テーブル users、user_roles、roles_permissions が必要です。

ソースコードを参照して、正確な列名がどうあるべきかを確認してください。

https://svn.apache.org/repos/asf/shiro/trunk/core/src/main/java/org/apache/shiro/realm/jdbc/JdbcRealm.java

または、次のように、.ini ファイル内のスキーマに一致するように独自のクエリを構成することもできます。

jdbcRealm.authenticationQuery=<your password select statement>
jdbcRealm.userRolesQuery=<your role names for username select statement>
jdbcRealm.authenticationQuery=<your permissions for role name select statement>
于 2013-11-02T08:16:30.843 に答える