Существует ли Delphi, эквивалентный классам Java PermissionManager или AccessController? - PullRequest
9 голосов
/ 14 февраля 2012

Существуют ли какие-либо классы (бесплатные, с открытым исходным кодом или коммерческие), которые выполняют управление доступом, аналогично тому, что делает AccessController в Java?Я хочу создать динамический набор политик, который можно изменять во время выполнения.

Но я хочу избежать необходимости кодировать

if Allowed( ... ) then

повсюду.Я знаю, что мне, вероятно, нужно настроить иерархию классов программ, но я предпочитаю, чтобы вместо добавления повсеместно ручных защитников.

Если нет готового кода, что было бы разумноподход?RTTI?

Редактировать: Вот пример из Аннотации безопасности и авторизация в GlassFish и Java EE 5 SDK .Поскольку кто-то упомянул аннотации в комментарии, я думаю, что это было бы идеально:

@Stateless
@RolesAllowed("javaee")
public class HelloEJB implements Hello {
    @PermitAll
    public String hello(String msg) {
        return "Hello, " + msg;
    }

    public String bye(String msg) {
        return "Bye, " + msg;
    }
}

Из статьи:

В этом примере метод hello () доступен каждомуи метод bye () доступен пользователям роли javaee.

Редактировать: Что ж, похоже, общее мнение состоит в том, что это не может быть сделано в Delphi.Другие думают, что это плохой подход.

Я, я все еще думаю, что это было бы здорово.Мой опыт работы с аннотациями в Java (как обезьяна кода в тотемном столбе) является положительным.Вы добавляете новый метод, добавляете некоторую форму аннотации (не совсем такую ​​же, как аннотации безопасности Java) и все готово.Позже администратор может перейти к панели администратора и добавить доступ к этому новому обработчику для предоставления доступа группе или отдельным пользователям.Это просто работает.

Это мои текущие альтернативы:

  1. Система безопасности TMS - это похоже на законченное решение с несколькими инструментами.Стоит посмотреть.Я принимаю это как ответ, даже если я, вероятно, не собираюсь этого делать.
  2. Это то, что выглядит многообещающе: Перехват виртуального метода Delphi .Это работает только на виртуальных методах, но я не думаю, что это слишком сложно для соблюдения.Это и аннотации могут сделать интересную систему (кажется, что она изначально была разработана для аутентификации DataSnap)
  3. Наличие только одного ActionManager в вашем приложении, и убедиться, что все действия могут быть инициированы только оттуда.Таким образом, вы можете использовать метод диспетчера действий OnExecute;Я делаю вид, что использую свойство TAction.Name в качестве имени разрешения («обработчик»), считывая список разрешенных действий из таблицы.Я могу использовать список действий из диспетчера действий, чтобы отобразить весь список в пользовательском интерфейсе администратора.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2012

Для Delphi пока нет ни такой структуры, ни такой концепции, как EJB, которая бы подходила для него. DELPHI поддерживает аннотации классов, и подобная структура может быть разработана, возможно, в сочетании с TAction, для обеспечения безопасности на уровне действий, но я сомневаюсь, что это можно распространить на блокировку определенных вызовов методов. Код Delphi никогда не запрашивает разрешения для вызова виртуального метода. Все, что внедряется в КАЖДЫЙ вызов виртуального метода в Delphi, добавление вызова checkPermission за кулисами (на мой взгляд) будет злом. Это будет медленно и хуже, чем писать такие чеки вручную.

Однако те же методы, которые применяются к классам Mock Delphi, возможно, могут быть использованы для создания некоторого объекта-оболочки автоматической защиты в будущем.

Я предполагаю, что, если бы рассматриваемая библиотека Java использовала Аспекты (по сути, «внедрение», реализованное с помощью такой техники, как перехват кода), тогда повсеместно не требовались бы вызовы «CheckAllowed». Если вы не возражаете поменять все вызовы методов на реализацию интерфейса, а затем предоставить оболочку, которая выполняла вызовы методов и использовала какую-то автоматически сгенерированную оболочку mock-security-wrapper, вы можете избежать вызовов CheckAllowed.

Итак, осторожное Нет, с условием «ограниченные рамки возможны в будущем».

1 голос
/ 20 февраля 2012

Да, есть Delphi Библиотека контроля доступа (lkacl) (OpenSource), JCL (OpenSource), которая предлагает довольно полную защиту функций , и наконец, если ваши требования будут действительно высокими, самое популярное коммерческое решение - TMS Security System .

...