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