Можно ли использовать AzMan для авторизации на основе ролей для объектов, которые создаются во время выполнения?
Можно ли использовать AzMan для авторизации на основе ролей для объектов, которые создаются во время выполнения? Если да, как это можно сделать?
Например:
Если объект класса "CustomAlert" создается во время выполнения, я пытаюсь выяснить, могу ли я иметь разные правила для разных объектов класса "CustomAlert". Если объект создается с использованием идентификатора конкретного пользователя, для этого пользователя доступно больше разрешений, считающих его СОЗДАТЕЛЕМ / ВЛАДЕЛЬЦЕМ объекта. Только создатель / владелец может изменять объект.
2 ответа
Azman поддерживает безопасность на основе ролей, но она основана только на ролях, а не на ACL. Если конкретный пользователь вошел в систему, то у него есть определенные разрешения, основанные на том, кто он, но эти разрешения являются просто статическими значениями - они могут быть сделаны для применения ко всем объектам данного типа, но не отличаются в зависимости от конкретных атрибутов конкретного экземпляры этого типа.
Для этого, безусловно, можно использовать AzMan. Я реализовал несколько приложений с этой формой безопасности на основе ресурсов и ролей. AzMan на самом деле ОЧЕНЬ гибок, и я также реализовал иерархию ресурсов (например, безопасность файловой системы Windows) с настраиваемыми пользователями и группами и полным наследованием ролей по всей иерархии, а также возможностью запрещать операции на любом уровне. Чтобы сделать это, вам нужно понять Сферы AzMan.
Области AzMan позволяют создавать отдельные роли / наборы операций для определенного ресурса. Этот ресурс может быть любым по вашему выбору, это просто строковый идентификатор AzMan. Эти роли / операции являются дополнением к любым назначенным ролям уровня приложения.
Способ, который я реализовал ранее, заключается в использовании идентификатора объекта в качестве имени области. В идеале для простоты это должен быть GUID (хотя это делает приложение MMC очень грязным), но в равной степени вы можете использовать формат "type-id", то есть "CustomerAlert-1" (намного более дружественный в приложении MMC). Выполняя AccessCheck в azman, вы передаете имя области AccessCheck (на данный момент она занимает только одну область, хотя определение AccessCheck допускает массив).
Я приведу пример того, как это сделать (для всех, кто борется) ...
- Создайте такие операции, как CustomerAlertView, CustomerAlertEdit, CustomerAlertDelete на уровне приложения.
- Создайте определение роли CustomerAlertOwner на уровне приложения.
- Добавьте все операции в роль CustomerOwner.
- В вашем приложении создайте область действия под названием "CustomerAlert-1".
- Создайте назначение роли с именем "Владелец" в области.
- Добавьте определение роли CustomerAlertOwner в назначение роли "Владелец".
- К этой роли владельца добавьте клиента / пользователя "Dave".
- Теперь, когда вы делаете проверку доступа, скажем, DeleteCustomerAlert(), вы просто передаете идентификатор операции CustomerAlertDelete и тип / идентификатор объекта, который вы хотите удалить, в качестве области действия, то есть "CustomerAlert-1"
Для проверок доступа на основе свойств объекта (т. Е. Блокировки чтения / записи определенных свойств) есть два подхода, о которых я могу подумать. Во-первых, это назначить операции в области объектов для каждого свойства и типа доступа, т.е. PropertyNameGet, PropertyNameSet, PropertyAddressAdd, Это можно упростить, создав операции на уровне приложения и используя задачи / роли для группировки часто используемых наборов разрешений. Другой способ - использовать область действия для каждого свойства (CustomerAlert-1-Name), но это может быть грязно и не так эффективно, так как вам потребуется отдельно загружать несколько областей при доступе к данному объекту.
Вам следует помнить, что вы не можете явно отрицать операцию в AzMan, вы просто не назначаете роль пользователю в приложении / области. Это означает, что определенные типы иерархий ресурсов (группы / пользователи) и т. Д. Могут быть более трудными для реализации.
Если вам нужна дополнительная помощь с AzMan, не стесняйтесь спрашивать. Я рассмотрел большинство сценариев.