2012-11-09 2 views
3

이것은 근본적인 질문 인 것 같지만 분명한 대답을 찾지 못했습니다. Grails와 함께 spring-security-core 플러그인을 사용하고 있으며 많은 포트폴리오를 보유한 S2Users가 있고 포트폴리오에는 많은 트랜잭션이 있습니다.Grails에서 자신의 데이터 만보기

거래를 조사하기 위해 스캐 폴러 뷰로 이동하면 각 사용자가 자신의 거래 만보고 있다는 것을 어떻게 알 수 있습니까? 반대로 모든 사용자의 모든 트랜잭션을 볼 수있는 사용자를 만들려면 어떻게해야합니까?

기본 동작이 무엇인지 명확하지 않으며 Grails/Spring-Security가 특정 도메인 클래스를 모든 사용자에게 표시할지 여부를 관련 사용자에게만 표시할지 여부를 어떻게 알 수 있습니까?

+0

아니요, 스프링 시큐리티는 데이터를 자동으로 제한하지 않습니다. 적절한 쿼리를 만들어야합니다. – madth3

답변

4

트랜잭션을 검사하기 위해 스캐 폴러 뷰로 이동하면 은 각 사용자가 자신의 트랜잭션 만보고 ​​있음을 어떻게 알 수 있습니까?

당신은 제대로 작동하려면에 대한 스캐 폴딩 뷰를 수정해야 할거야 :

@Secured(['ROLE_USER']) 
def list() { 
    def authenticatedUser = User.findByUsername(springSecurityService.principal.username) 
    def transactions = Transaction.findAllByUser(authenticatedUser) 
    [transactions: transactions] 
} 

위에만 허용됩니다 인증 된 사용자를 목록() 메소드를 액세스하고 모든 거래를 얻을 것이다 로그인 한 사용자.

반대로 모든 사용자가 명의 모든 사용자를 볼 수있는 사용자를 만들려면 어떻게해야합니까?

당신은 그들 모두를 볼 수있는 사용자를 생성하지 않습니다, 당신은 예를 들어, 그들 모두를 확인하기 위해 특정 사용자를하실 수 있습니다 컨트롤러의 방법을 만들 : 그런

@Secured(['ROLE_USER', 'ROLE_ADMIN']) 
def list() { 

    def authenticatedUser = User.findByUsername(springSecurityService.principal.username) 
    def transactions = [] 
    if (SpringSecurityUtils.ifAnyGranted('ROLE_ADMIN')) { 
     transactions = Transaction.list() 
    }else{ 
     transactions = Transaction.findAllByUser(authenticatedUser) 
    } 
    [transactions: transactions] 
} 

뭔가를, 어쨌든. 필요에 따라 조정하십시오.

+1

'springSecurityService.currentUser'를 사용할 수 있습니다. 그리고 정확하게 쿼리는'transactions = Transaction.withCriteria {portfolio {eq 'user.id', springSecurityService.currentUser.id}}' –

2

데이터 액세스 규칙이 더 복잡하고 모든 응용 프로그램 코드에서 적용해야하는 경우 spring-security-acl 플러그인을 사용할 수 있습니다.

3

여기에 도움이되는 플러그인이 있습니다. 그 정확한 목적을 위해 Hibernate Filter plugin을 사용하고 있습니다. 각 사용자가 자신의 데이터 만 볼 수 있도록 SQL을 제한하는 데 도움이됩니다. 그런 다음 사용자가 ROLE_ADMIN (플러그인에서 소스 복사 및 적용)을하는 경우 모든 필터를 사용할 수 없게하는 HibernateFilterFilters의 자체 구현으로 재정의 할 수 있습니다.

멀티 임차 (multi-tenancy) 용 플러그인도 있지만, 그 유지 관리가 나에게 불확실한 것 같습니다. 나는 Hibernate Filter 플러그인을 좋아한다. 간단하고 간단하다. - 플러그인을 Grails/GORM으로 후크하는 방법 때문에 .findById() 호출을 모두 변경해야한다.

+1

과 같아야합니다. 확실히 유용한 포인터입니다. 그러나 바닐라 Grails는이 라인을 따라 무엇을 제공합니까? – greymatter

+1

AFAIK 아무 것도. 자체 코드 또는 플러그인을 사용하여 직접 처리해야합니다. – wwwclaes

관련 문제