Проблема с использованием роли в запросе заключается в том, что вам необходимо предоставить ее в качестве аргумента для запроса, возможно, для каждого запроса. Что происходит, когда вам нужно предоставить аргументы для запроса? Вам также необходимо добавить роль к этим классам / картам параметров. Это все немного грязно.
Я бы сделал шаг назад и определил ваш DAO:
public interface MyDAO {
List<Employee> getEmployees();
...
}
, а затем создайте две реализации:
public class MyDAOSuper implements MyDAO {
public List<Employee> getEmployees() {
// call a query using your first SQL
}
}
public class MyDAOLimited implements MyDAO {
public List<Employee> getEmployees() {
// limited version
}
}
Одним из преимуществ этого подхода является то, что если определенные методы не должны использоваться определенной ролью, у вас есть возможность вызвать какое-то исключение нарушения безопасности.
Теперь, как вы подключаете это к остальной части вашего приложения, я не могу прокомментировать. Возможно, вы используете BlazeDS, и в этом случае я бы предложил использовать интеграцию Spring с BlazeDS , которая откроет внедрение зависимости как опцию.
В качестве альтернативы вы можете использовать простой фабричный метод (основанный на роли), чтобы получить правильный DAO.
Нет сомнений, что есть другие способы подключения, в зависимости от вашей конфигурации. Я думаю, что вышесказанное намного чище, чем то, что вы предлагаете.