2016-09-14 8 views
0

ユーザーにドキュメントのリストを表示できるアプリケーションがあります。Shiroを使用して結果セットを制限するためのアドバイス

ユーザーの役割とドキュメントのプロパティによっては、リスト上のドキュメントの一部を除外したい場合があります。たとえば、ユーザーが作成した文書のみを表示し、残りの部分をグレー表示することができるようにしたいとします。

この時点で、アプリケーションはSQL SELECTコマンドを実行します。このコマンドは、ユーザーが表示できるエントリと表示できないエントリのリストを返します。その後、ユーザーの権限と役割に従ってこの結果セットを制限します。 私たちの質問は次のとおりです:

  • これは城を介して行うことができますか?
  • Shiroを使用するときにこのような制限を設ける適切な方法は何ですか?例えばSELECT文を使用して最初からリストを制限しますか?

答えて

0

あなたはいくつかの選択肢があります: 最初にドキュメントの完全なリストをユーザに表示したいと思うので、あなたはまだそれらのすべてを照会する必要があります。 (私はこのことについて注意していますが、ユーザーがアクセス権を持たない情報を漏らしているので、例えば 'jcoder'というユーザーが 'Super Secret Passwords'という名前の文書を見ると、彼はあなたにこの文書があることを知っています。

)ご使用のケースのためにご利用の場合は、ONLYです、あなたは私はあなたを推測しているだけのシンプルなユーザ名の比較は(今やっている可能性が)

ほとんどのユースケース「のみ作者が自分の文書を編集することができます」である場合、これは単純ではなく、管理者、テクニカルライターなどがリソースにアクセスできるだけでなく、作成者も必要とします。そのため、リソースに一連の権限を割り当てることができます。 publications:docs:<document_id>:<action>、またはdocs:<document_id>:<action>とすることができます。 document_idがいくつかの一意のドキュメント識別子で、actionリソースに何が行われているのですか(一般的なCRUDアプリケーションでは、作成、読み取り、更新、削除)です。 この権限は任意のユーザーに付与することができ、publications:docs:<document_id>:*を作成者に付与することができます。これにより、誰かが職位を変更した場合や、管理者以外のすべてのユーザーにも読み取り専用のマークを付ける必要がある場合に、権限を取り消すことができます。

コードのスニペットは、次のようになります。

if(SecurityUtils.getSubject().isPermitted("publications:docs:":"+ documentId + ":read") { 
    // do something 
} 

それとも、彼らにall at onceそれらを確認することができます。

アプリケーションは、ユーザーにアクセス許可の追加を追跡する必要があります。 http://shiro.apache.org/permissions.html

、同様の質問:Java – efficient, database-aware instance-level authorization?

ことを見てみましょう

関連する問題