GurrenLagann
115
2015-08-11 07:33:56
5
3463

스프링 시큐리티에서 권한을 아주 세밀하게 권한 지정이 가능한가요?


최근 스프링 시큐리티의 필요성을 느껴서 공부하고 있습니다.

권한 부분을 세밀하게 지정이 가능한지 궁금합니다.


예를 들어서 1000번 게시판의 #123456번째 글을 삭제를 시도합니다.

포탈 관리자 : 삭제 허용

게시판 관리자 : 삭제 허용

글 작성자 : 삭제 허용

글 대리 작성자 : 삭제 허용


그 외 사용자 : 삭제 불가


이러한 세세한 권한 정보를 db에 저장해서 관리를 하려는데

클래스의 메소드 실행시에 aop를 걸어서 직접 처리를 하여도 되겠지만, 스프링 시큐리티에서 이러한 확장 포인트를 지원할 것 같습니다.

예제를 찾아보니 스프링 시큐리티 acl을 적용하는 것 같던데.. 실제 실무에서는 어떻게 적용하지는 궁금합니다.

답변 부탁드립니다.

1
  • 답변 5

  • 고고
    130
    2015-08-11 08:17:50

    가능합니다. 현재 비슷한 형태로 만들어서 사용 중입니다다다권한을 쪼개고 url을 잘 정의 후 ant패턴도 잘 정의하면 됩니다

  • Courage
    2k
    2015-08-11 10:03:48

    고고님 가능하다고 하셨는데.. 스프링시큐리티 만으로 가능한가요?

    질문자님은 URL이나 method 등 접근 권한을 얘기하는게 아니라 특정 자원에 대한 권한을 얘기하는거 같습니다만...

    자원에 대한 권한은 스프링시큐리티로는 처리할 수 없습니다.

    자원에 대한 권한 정보를 따로 관리하셔야 해요.. 자원에 대한 권한 정보는 보통 해당 자원보다 많은 데이터를 누적하므로 권한관리 설계를 잘해야 합니다. 

  • 제타건담
    7k
    2015-08-11 15:31:33

    제가 볼땐 불가능하진 않습니다..고고님 얘기대로 권한 설계를 정말 잘게 쪼개서 해야 하는거죠..

    기존 권한 설계면 1000번 게시판 이란 권한을 가지고 있는 사람들이면 무슨 작업이든(CRUD 작업)을 다 할 수 있다는 식의 설계면..

    이게 가능한 설계면 권한 자체를 1000번 게시판 조회, 1000번 게시판 등록, 1000번 게시판 수정, 1000번 게시판 삭제 이렇게 4가지로 권한 자체를 분리시키는거죠..그리고 그 권한을 가지고 있는 계정을 엮으면 됩니다..

    즉 그 외 사용자는 1000번 게시판 조회 권한만 가지게끔 하고 나머지 예시를 든 사용자들..즉 포탈 관리자, 게시판 관리자, 글 작성자, 글 대리 작성자는 4가지의 권한을 가지게끔 하는거죠..

    그러나 이렇게 설계하면 포탈 관리자, 게시판 관리자 란 권한을 정의할 방법이 애매해지기 때문에 이를 위해 권한 그룹을 두면 됩니다. 즉 권한 그룹으로 포탈 관리자를 만든뒤에 포탈 관리자 권한 그룹이 갖는 권한을 1000번 게시판 조회, 1000번 게시판 등록, 1000번 게시판 수정, 1000번 게시판 삭제..요렇게 권한이 갖게끔 하는거죠..스프링 시큐리티를 공부하고 있으시다 하시니 권한 그룹에 대한 것도 알고 계실껍니다..

    그러나 지금 전체적은 권한 설계를 모른 상태에서 질문에 대한 단편적인 내용만 가지고 얘기 드린 것이기 때문에 지금 얘기한 내용대로 설계가 가능한지 안한지는 체크 안된 상태에서 얘기한것입니다..즉 이런 설계가 현재 가능한지를 체크해보세요..

  • Courage
    2k
    2015-08-11 15:37:14

    제가 질문을 확대해석한건지는 모르겠지만.. 게시판에 한정된게 아니라 자원(게시글)에 대한 권한관리를 얘기하는거 아닌가요?

    예를 들어서 1000번 게시판의 #123456번째 글을 삭제를 시도


    #123456번째 글 삭제 시도시 권한 체크 아닌가요?

  • GurrenLagann
    115
    2015-08-11 18:55:59

    Courage님 말씀처럼 자원에 대한 권한을 체크하고 싶다고 생각했습니다.

    스프링 시큐리티 예제를 보니 url 매핑에 대해서 ROLE_로 시작하는 권한을 그룹으로 지정하더라구요.


    로그인 하지 않은 사용자 : ROLE_ANONYMOUS : /login/**

    로그인 한 사용자 : ROLE_USER,  url 패턴 : /**


    url 매핑 전부를 메모리에 올려 놓고 사용하는 걸로 봐서는 자원에 대해서 세부적인 권한 지정은 불가능이라 생각했습니다.

    예제를 보니 스프링 시큐리티 acls이 가장 근접한 것 같긴한데.. 아직 잘 모르겠습니다. 안되면 직접 만들어서 aop로 접근해볼까 싶네요.

    답변 해주셔서 감사합니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.