Apache shiro подразумевает разрешения - PullRequest
0 голосов
/ 10 марта 2011

Если у пользователя есть права доступа user:edit:1, и я использую аннотацию @RequiresPermissions("user:edit"), почему Широ выдает исключение?Разве это разрешение не должно подразумеваться тем фактом, что они имеют user:edit:1?Если я поставлю @RequriesPermissions("user:edit:1"), тогда он будет работать нормально, но в контексте операции я не буду знать, что такое 1, так что это будет проверено позже в методе, но я бы хотел вообще не заходить в метод, если ониу вас нет разрешения user:edit.

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Не думаю, что ответ Аскандролиса правильный, поскольку в документации Широ говорится:

Следующее, однако, гораздо менее идеально подходит для проверки во время выполнения:

if (SecurityUtils.getSubject().isPermitted("printer:print")) { //print the document }

Почему? Потому что второй пример говорит: «Вы должны иметь возможность печатать на любом принтере, чтобы выполнить следующий блок кода». Но помните, что «printer: print» эквивалентен «printer: print: *»!

( Документация Shiro )

То есть @RequiresPermissions("user:edit:*") означает то же самое, что и @RequiresPermissions("user:edit"), т. Е. Принципал должен иметь возможность редактировать любого пользователя.

1 голос
/ 12 марта 2011

"user:edit" подразумевает "user:edit:1", но не наоборот.Вы можете продолжать использовать @RequiresPermissions("user:edit"), а затем проверить "1" в вашем методе.Вы также можете использовать подстановочный знак @RequiresPermissions("user:edit:*"), который точно такой же, но я думаю, что он более понятен.

...