Существует ли в Delphi эквивалент классов Java PermissionManager или AccessController?

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

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

if Allowed( ... ) then

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

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

Edit: Вот пример из статьи Security Annotations and Authorization in 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 в качестве имени разрешения («обработчик»), читая список разрешенных действий из таблицы. Я могу использовать список действий из диспетчера действий, чтобы отобразить весь список в пользовательском интерфейсе администратора.

9
задан Leonardo Herrera 21 February 2012 в 14:30
поделиться