Я согласен с Николь: похоже, вы выполняете то, что могло показаться хорошей оптимизацией, но у вас возникают проблемы с масштабированием.
Многие системы RBC имеют дело с большим количеством разрешений, что является одной из причин существования ролей - обычным пользователям нужно только знать, в какой роли они находятся - предоставьте разработчикам возможность определить распределение ролей.Большие системы могут предоставлять графический интерфейс для суперпользователей для выполнения сопоставления ролей или даже создания разрешений, но только для обеспечения максимальной гибкости для опытных пользователей.
Однако из-за J2EE на уровне кода все сводится к программной проверке «ролей».Это может сбивать с толку, когда на самом деле вы хотите протестировать разрешение на выполнение операции.Просто помните об этом семантическом разрыве.
С точки зрения оптимизации рассмотрите не метод назначения разрешений, а когда и как вы выполняете проверку.В веб-приложении вам может потребоваться только проверить, когда поступит вызов от внешнего интерфейса, и, возможно, задержка в сети затмит любые оптимизации, которые вы здесь выполняете.
Если вы решите, что все еще хотите оптимизировать,вы, вероятно, обнаружите, что достаточно просто кэшировать разрешения при входе в систему.Фактический поиск разрешения будет все в памяти, поэтому будет небольшим после начальной загрузки из базы данных.
Чтобы избежать комбинаторного взрыва разрешений, заранее разработайте сильную логику - запишите ее - и убедитесь, что вы охватили все свои базы.Если вы видите необходимость создания новых динамических разрешений, например, когда в вашу систему добавляются новые сущности, тогда следите - лучше это сделать с помощью шаблона посредника или менеджера, который может проверить ваши бизнес-правила перед выдачей защищенныхюридическое лицо.Здесь вы вступаете в сферу библиотек, таких как Drools, которые служат для представления бизнес-логики из вашего приложения, чтобы ее можно было обновлять в соответствии с меняющимися бизнес-требованиями.