Существуют ли какие-либо классы (бесплатные, с открытым исходным кодом или коммерческие), которые выполняют контроль доступа, аналогичный тому, что делает 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), и все готово.Позже администратор может перейти в панель администратора и добавить доступ к этому новому обработчику для группы или отдельных пользователей. Просто работает.
Это мои текущие альтернативы:
OnExecute
; Я делаю вид, что использую свойство TAction.Name
в качестве имени разрешения («обработчик»), читая список разрешенных действий из таблицы. Я могу использовать список действий из диспетчера действий, чтобы отобразить весь список в пользовательском интерфейсе администратора.