ユーザーにアクセス許可がuser:edit:1
あり、アノテーション駆動型を使用している場合、 @RequiresPermissions("user:edit")
shiro が例外をスローするのはなぜですか? その許可は、彼らが持っているという事実によって暗示されるべきではありませんuser:edit:1
か? 私が置く@RequriesPermissions("user:edit:1")
とうまくいきますが、操作のコンテキストではまだ1が何であるかがわからないので、後でメソッドでチェックされますが、そうでない場合はメソッドに入らないようにしたいと思いますuser:edit
パーミッションを持っています。
2 に答える
シロのドキュメントには次のように記載されているため、アスカンドロリスの答えは正しいとは思いません。
ただし、次の例は実行時チェックにはあまり適していません。
if (SecurityUtils.getSubject().isPermitted("printer:print")) {
//print the document
}
なんで?2 番目の例では、「次のコード ブロックを実行するには、任意のプリンターに印刷できる必要があります」と記載されているためです。ただし、「printer:print」は「printer:print:*」と同等であることを忘れないでください。
つまり@RequiresPermissions("user:edit:*")
、@RequiresPermissions("user:edit")
プリンシパルは任意のユーザーを編集できる必要があるということです。
"user:edit"
意味"user:edit:1"
しますが、その逆ではありません。引き続き使用して、メソッドの「1」@RequiresPermissions("user:edit")
を確認できます。まったく同じワイルドカードを使用することもできますが、より明確だと思います。@RequiresPermissions("user:edit:*")