1

私は apache shiro を初めて使用し、apache shiro ページのチュートリアルのほぼ 60% を読みました。

素晴らしいフレームワークですが、私の要件を満たすことができるかどうか疑問に思っています。

パーミッションベースの認証に興味があります。

たとえば、ユーザーがリソースを削除する権限を持っているかどうかを確認するには、次を使用できます。

currentUser.isPermitted( "resource:delete" );

ただし、私たちのアプリケーションでは、ユーザーがリソースを削除する権限を持っていても、すべてのリソースではなく、指定された一部のリソースしか削除できません。

たとえば(単なる例です)、リソースには、createdbyこのリソースを作成した人を記録する名前のフィールドがあります。

現在、ユーザーはresouce:delete権限を持っている場合にのみ、自分で作成したリソースを削除できます。

実際には、ユーザー (認証済みで権限を持つユーザー) が削除できるリソースはdelete、より多くの制約によって計算されます。

では、このスーツで shiro を機能させるにはどうすればよいでしょうか。

4

2 に答える 2

3

Shiro でこれを行うことができますが、いくつかのコードを記述する必要があります。Authorizer のサブクラスを作成してセキュリティ マネージャに挿入するか、JdbcRealm などのいずれかのレルム クラスのサブクラスを作成します。次に、isPermitted メソッドをオーバーライドします。これには、データベース テーブルや NoSQL データベース内のドキュメントなどのアクセス許可モデルにアクセスできる必要があります。

isPermitted の呼び出しでは、オーバーライドされたメソッドで検索できるように、削除するリソースを指定する必要があります。

AuthorizingRealm サブクラスの isPermitted メソッドをオーバーライドすると、ログインしているユーザーのプリンシパルユーザーのロールにアクセスできます。これにより、次のように言うことができるため、かなりの柔軟性が得られます: user (principal) Fred with roles: Manager, Administrator . パーミッション モデルは、管理者または管理者である Fred が指定されたリソースでタスクを実行できるかどうかを決定できます。

それがあなたにいくつかのアイデアを与えることを願っています。

于 2014-09-06T19:31:54.640 に答える
0

程度から、私は Shiro を探索しましたが、カスタマイズされたチェックを行うためのそのレベルの柔軟性が得られるとは思いません。基本的に、構成ファイルで定義された役割と権限に基づいて機能します。

この機能については、クエリ フェッチ レベルでこのチェックを行うことにより、ユーザーが削除を許可されているレコードのみを表示することをお勧めします。(または) UI レベルで条件を追加し、ログインしているユーザーが作成者と同じ場合に削除ボタンを表示しないようにします。これは単なる提案です。

于 2013-06-19T09:19:54.940 に答える