Как это сделать? Дополнительную фичу к приложению Spring boot, Spring boot REST
Как владелец, я хотел бы иметь все возможные привилегии: - иметь возможность создавать других администраторов и пользователей. - иметь возможность утверждать членство новых пользователей. [: если я добавлю их, нет необходимости утверждать их] - иметь возможность писать резюме в книги всех существующих пользователей. - иметь возможность оценивать книги всех существующих пользователей. - иметь возможность менять пароли пользователей.
Мне не нужно полное решение. Хотя бы направление, где и что посмотреть и.т.д.
Ответы (1 шт):
Как сказал Юрий, способов реализовать описанный вами функционал несколько десятков(если не больше). Что необходимо для реализации такого функционала?
- Необходимо продумать, какие модели будут в вашем приложении и описать их. Скорее всего, это будет модель User, Role, CV(если речь идет о Резюме для приема на работу), у модели User будет поле CV и Role, определяющая администратор он или нет и так далее.
- Далее Нужно создать слой работы с базой данных или DAO слой, с помощью классов которого вы сможете работать с бд. Тут стоит разобраться, что такое JPA, EntityManager и тд.
- Далее создания слоя Сервиса, в нем будет описана бизнес логика. Например, метод создающий нового пользователя, в котором будет описано условие, при котором пользователь будет подтвержден при создании(к примеру).
- Следом контроллеры, которые будут обрабатывать запросы - отдавать страницы представления(например в html), выполнять какие либо действия, которые приведут к изменению состояния бд.
Ну и слой представления. В конечном итоге взаимодействие внутри приложения будет выглядеть следующим образом - Пользователь вводит в браузер URL и нажимает Enter, тем самым отправляя запрос к нам на сервер, контейнер сервлетов(Tomcat, к примеру) определяет, к какому из контроллеров передать управление, пусть это будет GET запрос на получение главной страницы, для которой у нас в контроллере создан соответствующий метод
@Controller @RequestMapping("/") public class MainController { @GetMapping public String getMainPage() { return "main"; } }так же у нас будет контроллер для администратора, который нужен для реализации описаного функционала
@Controller @RequestMapping("/admin") public class AdminController { @Autowired private final UserService userService; @PostMapping("/new-user") public void createNewUser(@RequestBody User user) { user.setEnabled(true); userService.save(user); } }В нем мы принимаем пользователя и просим UserService(который спринг любезно нам заинджектил из-за аннотации @Autowired) его сохранить, предварительно поставив флаг, означающий, что пользователь активен в положение true.
@Service public class UserService { @Autowired private final UserDao userDao; @Transactional public void save(User user) { userDao.save(user); } }В данном случае, у нас простая логика сохранения, так что сервис просто передает полученного пользователя в DAO. Это может показаться бессмысленным, но если нам нужно было бы так же выполнить перед сохранением какую-то сложную логику - этот слой был бы очень кстати, чтобы не мешать все в одну кучу.
@Repository public class UserDAO { @PersistenceContext private final EntityManager entityManager; public void save(User user) { entityManager.persist(user); } }Воуля, у нас есть новосозданный пользователь в базе. По аналогии можно прописать в этих классах методы, которые будут изменять данные пользователей или любую другую логику. Чтобы доступ к к админскому контроллеру был только у пользователя с ролью Админа, необходимо подключить и настроить Spring Security. Пробежавшись по описанному выше списку вещей и коду, вы можете понять, что вам неизвестно о Spring. Видите незнакомое слово - гуглите или ищите уроки по этой теме и будет вам счастье. Так же советую просто посмотреть уроки/статьи и другие примеры CRM на Spring. Надеюсь, ответил на ваш вопрос.