Как ограничить доступ пользователю к чужим постам на сайте?
Я делаю приложение где любой пользователь может разместить на странице пост с полями название, айди, текст. Хочу сделать так, чтобы пользователи видели только свои посты. Чужие они не только не видят, но и не могут получить доступ к его полям, к примеру , если на сайте есть поиск по айди, то они не могут вписать айди поста другого пользователя и получить его. Как мне реализовать эту функцию? Не совсем понимаю что я должен писать в поисковике. Пробовал что-то типа "how to link two models in spring framework" (user, post) – выдает другое и еще парочку вариантов перепробовал тоже не то. А если искать впринципе создание постов, то наверно там общие для всех пользователей выдаст.
Михаил, вы правы просто в basic быстрее всего увидеть как привязывается к сессии юзер. про роли и контроль доступа под рукой ссылки не было - думаю тс поможет
Самый простой путь: в том месте где вы загружаете сущность поста из БД добавить проверку, что текущий авторизованный пользователь является автором поста.
Авторизацию пользователя можно сделать разными способами, тут гуглить Spring Security - это все целиком про авторизацию и проверку прав доступа.
Например, вот статья о сессиях в спринге, думаю в качестве отправной точки сгодится.
Добрый день.
Как отметил коллега, в первую очередь вам нужно связать пользователя и его посты.
Рекомендую ознакомиться со связями между сущностями. (OneToOne, OneToMany & ManyToOne, ManyToMany). Затем связать пользователя и его посты при помощи OneToMany & ManyToOne. Таким образом на стороне поста у вас будет ID пользователя, который его добавил.
Далее в контроллерах, вам необходимо получить текущего авторизованного пользователя и проверить принадллежит ли пост этому пользователю или нет. Если нет, то показываем 403. Тут уже зависит от вашей задумки. Можно по-разному проверить и по-разному реализовать
Орхан Гасанлы спасибо, про связи между сущностями почитаю. Вначале даже не понимал что искать, поэтому сам пришел к такому решению: добавил в модель поста поле userEmail, в репозитории поста прописал метод findAllByUserEmail() и в контроллере создал список со всеми постами, чей userEmail сходится с почтой авторизованного пользователя и этот список показал на странице. Оказалось проще чем я думал))