refactor project structure, add access control