안녕하세요.
여긴 자주 안오지만 프갤에서 답변 받으면서 열심히 공부하고 있습니다.
지라라는 웹사이트 클론으로 만들다가 스프링 시큐리티 관련해서 궁금한 점이 생겼는데요.
지라를 보면 마치 카카오톡 오픈채팅 만들듯이, 프로젝트를 만들고 누군가는 가입할 수 있는 시스템이 있는데,
a프로젝트에선 관리자인 '가'유저가 b프로젝트에서는 멤버인 경우 등등 권한이 프로젝트마다 달라지는데
이 프로젝트 별로 권한을 주는 방법이 너무 막막해서 질문 드립니다.
위 사진과 같이, 프로젝트 별로 권한을 보고 싶어서 authorities 테이블에 id와 authority에 더해 p_name이라는 컬럼을 더해 봤는데
막상 쿼리문을 짜보니깐 where절 끝 부분 a.p_name = ? 에서 ?부분의 값을 어떻게 줘야 하지? 라는 생각이 들더라고요.
결국 커스텀을 해야하는건데 이 부분이 너무 막막합니다.
여기에 멤버가 로그인 되어있더라도, 가입되지 않은 프로젝트의 url을 입력하면 입장이 불가능하게 하는 기능도 필요하고요..
시큐리티로 가능한 부분인가요?
아니면 그냥 시큐리티에서는 미로그인 유저 관련 큰 부분만 잡고가고
관련 컨트롤러의 서비스에서 권한을 직접 확인하는게 좋나요(글 삭제시 글 삭제 컨트롤러에서 권한 확인)?
질문이 장황한데
검색 키워드나 방향성만이라도 알려주시면 감사하겠습니다.
프로젝트별로 권한을 구분할수 있는 컬럼을 만든뒤 서비스에서 권한 확인 하는 로직이 좋을 것 같습니다 시큐리티에서 처리하기엔 복잡해지지않을까가 제 생각입니다. - dc App
네 시큐리티에서 처리하긴 힘드나보네요 그러면 서비스에서 하나하나 처리하는 쪽으로 만들어보겠습니다.
PermissionEvaluator 확장해서 쓰면 된다
PreAuthorized hasPermission도 참고
PreAuthorized는 전에 찾아봤었는데 이것도 결국 서비스마다 하나씩 넣어줘야 하는 방식인거죠? 일단 알려주신거 전부 확인해보겠습니다. 일단 지금은 페이지 이동할 때마다 db확인하는건 좀 그래서 일단 권한을 확인하는 클래스를 만들어서 스프링 bean에 등록해놓고 권한 필요한 서비스마다 호출해서 권한을 DB에서 확인하고 있으면 MAP형태로 메모리에 넣어둔 다음에, 다음부턴 메모리를 확인하는 식으로 짜놨어요.
권한이 몇개나 있을줄 알고 메모리에 넣어두는거야? 그러다 터져
아 그정돈가요? 그냥 일단 되는대로 짜보는 중이라.. 한 번 고민 해봐야겠네요 지금은 링크드해쉬맵써서 max100개하고 넘어가면 이전꺼 삭제하게 해놨어요
사용자가 늘어나면? 권한이 제거되면? 서버 개수가 늘어나면?
되는대로 짜지마라, 고민하고 짜라 고민에 고민을 거듭해서 좋은 해결책을 내라 동작하는거보다 이게 훨씬 더 중요하고, 이런 고민들이 너를 좋은 기업에 취직하게 도와준다
일단 메모리에 넣어보고 어느정도까지 되는지 확인을 해봐야 db랑 메모리랑 장단점을 알 수 있을 것 같아서 해보고 있어요 명심하고 최대한 좋은 방식으로 짜보겠습니다.
메모리에 넣는건 절대로 답이 아닌데, 일단 그렇게 하면서 확인을 할 일도 아니고 뭐 알아서 해라
서버 개수쪽은.. 부끄럽지만 제가 국비수업과정수준 이상 공부를 안해서 싱글서버운영밖에 못해봤어요. 그 부분도 찾아서 공부해봐야겠네요
언제나 서버가 여러개라는 가정 하에서 개발해야해 너는 클라 개발자가 아니라 서버 개발자다 면접보는데 싱글서버만 고민했습니다 = 바로 탈락
네 감사합니다~