Refactoring permission with strategies