2014-10-24 13 views
13

के साथ वसंत सुरक्षा एसीएल का उपयोग कर मैं स्प्रिंग डेटा आरईएसटी द्वारा उजागर एपीआई को अधिकृत करने की कोशिश कर रहा हूं। अब तक मैं भूमिका आधारित प्राधिकरण यानी ऐसा करने में सक्षम हूँ:वसंत डेटा आरईएसटी

@RepositoryRestResource(path = "book") 
public interface BookRepository extends JpaRepository<Book, Long> { 

    @PreAuthorize("hasRole('ROLE_ADMIN')") 
    <S extends Book> Book save(Book book); 
} 

इसके अलावा एक ही परियोजना में मैं एसीएल तंत्र है, जो काम कर रहा है के साथ एक सेवा परत होती है।

मैं के साथ स्प्रिंग डाटा बाकी यानी PostFilter अभिव्यक्ति का उपयोग करने में असमर्थ हूँ:

@PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, admin)") 
List<Book> findAll(); 

अगर किसी के साथ स्प्रिंग डाटा बाकी एसीएल का उपयोग कर यह बहुत मदद की होगी।

नोट: मैं खुले मुद्दों नीचे के बारे में पता कर रहा हूँ:

https://jira.spring.io/browse/DATAREST-236

https://jira.spring.io/browse/SEC-2409

उत्तर

34

का उपयोग कर JpaRepository सूची < बुक > findAll() विधि पीछा किया गया था। तब मैंने क्रूड रिपोजिटरी का इस्तेमाल किया, और पोस्टफिल्टर लागू हो गया।

अधिक जानकारी के लिए एक नमूना परियोजना GitHub पर उपलब्ध है: https://github.com/charybr/spring-data-rest-acl

एसीएल आधारित प्राधिकरण स्प्रिंग डाटा बाकी द्वारा उजागर इकाई नीचे के लिए काम कर रहा है।

import org.springframework.data.repository.CrudRepository; 
import org.springframework.data.rest.core.annotation.RepositoryRestResource; 
import org.springframework.security.access.method.P; 
import org.springframework.security.access.prepost.PostFilter; 
import org.springframework.security.access.prepost.PreAuthorize; 

@RepositoryRestResource(path = "book") 
public interface BookRepository extends CrudRepository<Book, Long> { 

    @PreAuthorize("hasRole('ROLE_ADMIN') or hasPermission(#book, 'write')") 
    <S extends Book> Book save(@P("book") Book book); 

    @Override 
    @PostFilter("hasPermission(filterObject, 'read') or hasPermission(filterObject, admin)") 
    Iterable<Book> findAll(); 
} 
+5

आप समय आने के लिए और अपनी समस्या का जवाब पोस्ट करने के लिए सर को एक उपरोक्त (यहां तक ​​कि डेढ़ साल बाद) के लायक हैं। धन्यवाद ! –

+0

पृष्ठ खोजने योग्य सरणी के अंदर व्यक्तिगत इकाई मानों के आधार पर 'findAll()' फ़ंक्शन के भीतर '@ पोस्टअधिकृत' का उपयोग करके परिणामों को फ़िल्टर कैसे करें? –

+0

@ डब्ल्यूएम। पेजेबल '@ पोस्टअधिकृत' के लिए एक अच्छा विचार नहीं है। कृपया https://docs.spring.io/spring-security/site/docs/4.0.x/reference/htmlsingle/#data-query देखें –

संबंधित मुद्दे