По моему опыту, аутентификация и авторизация лучше всего работают на уровне контроллера (если вы работаете с веб-приложением MVC). Вы не хотите, чтобы эти вещи загрязняли ваши доменные объекты / службы / обработчики команд / что угодно, тем более тесты для этих вещей.
Короче говоря, я считаю аутентификацию и авторизацию проблемой типа запроса, поэтому делайте что-то вроде этого (например, C # / ASP.NET MVC):
[HttpPost]
public void SomeRestrictedAction(SomeViewModel model) {
if (!User.IsInRole("SomeRole"))
throw new SecurityException("I don't think so, dude!");
// perform business logic
}