added authorization abstraction