blog.jdl 파일을 프로젝트 내에 생성한다.
vi blog.jdl
entity Blog {
name String required minlength(3),
handle String required minlength(2)
}
entity Entry {
title String required,
content TextBlob required,
date Instant required
}
entity Tag {
name String required minlength(2)
}
relationship ManyToOne {
Blog{user(login)} to User,
Entry{blog(name)} to Blog
}
relationship ManyToMany {
Entry{tag(name)} to Tag{entry}
}
paginate Entry, Tag with infinite-scroll
jhipster import-jdl blog.jdl
명령어로 추가해준 jdl 파일을 import 해준다.
*MySQL 사용시 스키마에 blog, entry, tag 테이블이 생성되어야지만, 정상적으로 작동한다. 테이블이 생성되지 않았을 경우, 500 Internal Server Error 가 발생한다.(스키마를 지우고 새로 만든 후 프로젝트를 실행시킨다)
샘플 데이터가 자동으로 들어가져있는 모습이다. 샘플 데이터는 src -> main -> resources -> config -> liquibase -> fake-data 에 있는 blog.csv (entry, tag 도 마찬가지)이다.
liquibase -> changelog 폴더를 보면, blog, entry, tag에 관한 changelog들이 생성되었음을 볼 수 있다.
master.xml에 각각 새로 생긴 changelog.xml 파일들이 자동으로 include 되어있으므로, 백엔드를 실행시킬때, 해당 테이블이 반영된다.
기본 예제 데이터들을 삭제하고 싶으면, application-dev.yml 파일에서 liquibase의 context 부분에 있는 faker를 지워주면 된다.
changelog.xml(ex. 20191002080548_added_entity_Blog.xml)의 changeSet의 context부분이 faker 이기 때문에 이걸 받아오지 않으면, 를 할 수 없으므로, 예제 데이터가 사라진다. 단 DB에 기존에 저장된 값들은 지워주어야한다.
기존 데이터를 지우고, 백 엔드를 재시작하면, 데이터가 지워지고, 테이블만 생성된다.
Create a new Blog를 눌러 아래와 같이 두 개의 Blog를 만들어준다.
그 후, entities에서 entries로 들어가 create a enw Entry를 클릭해 임의로 작성한다.(admin's blog 1개, user's blog 1개)
여기서 문제점이 하나 발생한다. admin으로 로그인 한 경우 admin 게시물 만, user로 로그인 한 경우 user 게시물 만 보여야하는데, 지금은 admin, user 의 게시물을 둘 다 볼 수 있다.
src -> main -> java -> com.mycompany.myapp -> web.rest -> BlogResource에서 밑줄 친 블로그의 리스트를 가져오는 부분에서 findAll(모든 블로그를 가져오는 것)을 findByUserIsCurrentUser(현재 유저의 것만)로 바꿔준다.
그 후 재실행하면, admin으로 로그인 한 경우 admin 게시물만, user로 로그인 한 경우 user 게시물만 볼 수 있다.
Blog 뿐만 아니라 Entries도 비슷한 방식으로 고쳐준다.(EntryResource)
findBlogUserLoginOrderByDateDesc는 없는 함수이므로 생성해준다.
그럼 EntryRepository에 자동으로 생성된다.
재 실행시, Entries 도 admin 게시물은 admin, user게시물은 user가 접근할 수 있게 고쳐진다.
(질문)
그러나 여전히 문제점이 남아있다.
주소창을 직접 조작할 경우, 권한이 달라도 접속할 수 있기 때문이다.
user name과 current login user을 매치시켜서 일치하는 정보만 열람할 수 있게 해준다.