2012-01-19 21 views
6

本当に柔軟なセキュリティフレームワークApache Shiroが見つかりました。私はShiroを使って認証と認可をうまく実装しました。Apache Shiroのインスタンスレベルのアクセス制御

フレームワークの魅力的な機能の1つに、インスタンスベースのセキュリティがあります。私はShiroのウェブサイトからサンプルをコピーしました。

以下の権限がデータベースに格納されます。

printer:query:lp7200 
printer:print:epsoncolor 

次のコードは、特定のプリンタインスタンスに対して、現在の認証済みユーザーにアクセス許可があるかどうかを確認します。

if (SecurityUtils.getSubject().isPermitted("printer:query:lp7200") { 
// Return the current jobs on printer lp7200 
} 

私の質問は、「これは権限がデータベースに格納されている方法ですか?」ということです インスタンスベースのアクセス許可を格納するためのより良い方法はありますか?

お知らせください。

おかげであなたは、この情報は完全にあなた次第です保管方法

答えて

9

Realm実装では、使用しているデータソースを照会し、必要な形式で許可データを抽出します。

(たとえば、あなたの例に示されているような)文字列として直接格納する人もいれば、(たとえば、RDBMSを使用している場合は)専用のテーブルにそれらを格納する人もいます。権限エンティティをロールに関連付けることも、ユーザーに割り当てられたユーザーやグループに直接関連付けることもできますが、アプリケーションには意味があります。

あなたのストレージオプションは完全にあなた次第です。 Realm.isPermitted(...)操作が期待通りに機能することを確認したいが、データを具体化する。代わりに、直接Realm.isPermitted(...)メソッドを実装するの

は、多くの人々はそれがより便利に抽象AuthorizingRealmクラスをサブクラス化しdoGetAuthorizationInfoメソッドをオーバーライドし、アクセス許可の表現をサポートするAuthorizationInfoインスタンスを返すように見つけます。

この方法では、データストアにクエリを行い、返されたデータをAuthorizationInfoインスタンスに変換することができます。あなたは、クエリで非常に具体的な制御をしたい場合はRealmisPermittedメソッドをオーバーライド

、必要なだけです