Ответ на этот вопрос на уровне реализации будет сильно зависеть от ваших инструментов. Это будет .NET, Java, PHP, Python?
Ваш DAL должен заботиться ТОЛЬКО о возврате и передаче данных в хранилище данных. Фильтрация, которую вы описываете, лучше всего обрабатывать на среднем уровне с бизнес-логикой. Большинство запросов происходит в контексте вошедшего в систему пользователя, поэтому возвращаются соответствующие данные, поэтому помните об этом при проектировании системы.
ОБНОВЛЕНИЕ:
Учитывая .NET и NHibernate, NHibernate является вашим ORM / DAL. В идеале DAL должен быть реализацией репозитория, чтобы вы могли получать данные в вашу базу данных и из нее.
Разработка модели предметной области для обработки отношений между пользователем, ролью и ветвью. Каждый объект связан с другими объектами. «Записи» для этих ветвей также должны быть смоделированы как объекты. Как только ваши отношения установлены в вашей модели, вы можете разрабатывать методы для каждой сущности, которые извлекают связанные сущности. Вы можете считать эту модель своего рода ViewModel или Controller. Его задача состоит в том, чтобы явно реализовать отношения между сущностями, создавая абстракцию «выше» той, что предоставляется NHibernate.