2016-05-25 8 views
0

Я пытаюсь смоделировать некоторую сложную систему управления разрешениями с помощью apache shiro.Роли пользователей против прав пользователя с использованием apache shiro

Английский язык, не являющийся родным языком. Я боюсь, что мне не хватает некоторых тонкостей таких терминов, как «Роли», «Разрешения», «Права» & «привилегии».

Например, скажем, я хочу создать систему, которая управляет такими ресурсами, как принтеры, расположенные внутри зданий. БД хранит информацию о том, какой принтер находится в каком здании. Пользователи этой системы должны иметь возможность сбросить принтер или распечатать его.

Понятно, что некоторые пользователи будут «супер администраторами» и смогут перезагружать и печатать на любом принтере («принтер: *: *»). Я думаю, мы могли бы сказать, что у этих людей есть «Супер» Роль администратора ".

Но что делать, если кому-то разрешено перезагружать принтеры в конкретном здании («здание: A: *»)? Является ли «Администратор здания» (прамарметрическая) роль? или это просто разрешение на конкретное здание? Как бы вы моделировали это с помощью Apache Shiro?

n.b.
При пометке этого QI добавлен тег пользователя-ролей, в котором говорится: «Роль пользователя - это группа пользователей, которые имеют одни и те же привилегии или разрешения для системы. Используйте этот тег для вопросов о том, как роли пользователя работают в определенной безопасности рамки или вопросы о реализации пользовательских ролей в вашей программе ».

Правильно ли я предполагаю, что на основе этого определения не существует такой роли, как «Администратор здания», поскольку наличие Администратора здания A не дает вам тех же прав, что и администратор здания B? , и если да, то какова была бы правильная терминология для описания «Администратора здания»?

ответ

1

Рассматривали ли вы использование более трех токенов в формате WildCardPermission?

Нет ограничений на количество токенов, которые могут быть использованы, поэтому ваше воображение зависит от того, как это можно использовать в вашем приложении.

WildCardPermission Javadoc

Вместо domain:action:instance синтаксиса обычно используемых в примерах Apache Shiro и документации, вы можете добавить еще один маркер для представления здания, например, printer:print,reset:*:buildingA.

Недостатком этой схемы является то, что всякий раз, когда вы проверяете, разрешено ли действие на конкретном принтере, вам также нужно будет указать местоположение, даже если маркер, представляющий экземпляр принтера, может уже однозначно идентифицировать этот принтер :

// let's say the role for buildingA-admin has permission of "printer:*:*:buildingA" 

subject.isPermitted("printer:print:epson123:buildingA"); // returns true 
subject.isPermitted("printer:print:epson123"); // returns false 

в зависимости от вашего домена приложения, может быть структура, как buildingA:printer:print,reset:epson123 даже может быть более целесообразным и полезным.


Чтобы ответить на другой вопрос, касающийся ролей пользователей, вы бы правильно предположить, что если у вас есть оба buildingA-admin и buildingB-admin роли, они разные роли пользователей, если разрешения, назначенные для них не являются одна и та же.
Вы можете представить общую роль пользователя Building Admin для разрешений, которые могут иметь все администраторы для разных зданий, чтобы избежать дублирования этих разрешений в разных административных ролях администратора.

+0

Спасибо. Мне нужно будет изучить этот вариант, так как я не уверен, что будет иметь последствия для моего собственного домена. тем более что в моем собственном домене «принтеры» можно перемещать между «Зданиями». – epeleg

 Смежные вопросы

  • Нет связанных вопросов^_^