def get_collection(self, request=None, **params): """ Overriden to support ACL filtering. When auth is enabled, adds '_principals' param to perform ACL filtering during query and performs ACL filtering of results' relationships. :param request: Pyramid Request instance that represents current request :return: Found and ACL filtered (if auth enabled) documents wrapped in DataProxy """ _auth_enabled = auth_enabled(request) if _auth_enabled: self._req_permission = PERMISSIONS[request.action] params['_principals'] = request.effective_principals documents = super(ACLFilterES, self).get_collection(**params) if _auth_enabled and isinstance(documents, _ESDocs): _nefertari_meta = documents._nefertari_meta documents = _ESDocs([ check_relations_permissions(request, doc) for doc in documents]) documents._nefertari_meta = _nefertari_meta return documents
def test_get_collection_auth(self, mock_get, mock_filter): from nefertari.elasticsearch import _ESDocs docs = _ESDocs([1, 2]) docs._nefertari_meta = "asd" mock_get.return_value = docs obj = es.ACLFilterES("Foo", "foondex", chunk_size=10) request = Mock(effective_principals=["user", "admin"], action="index") request.registry.settings = {"auth": "true"} obj.get_collection(request=request, foo=1) assert obj._req_permission == "view" mock_get.assert_called_once_with(foo=1, _principals=["user", "admin"]) mock_filter.assert_has_calls([call(request, 1), call(request, 2)])
def test_get_collection_auth(self, mock_get, mock_filter): from nefertari.elasticsearch import _ESDocs docs = _ESDocs([1, 2]) docs._nefertari_meta = 'asd' mock_get.return_value = docs obj = es.ACLFilterES('Foo', 'foondex', chunk_size=10) request = Mock( effective_principals=['user', 'admin'], action='index') request.registry.settings = {'auth': 'true'} obj.get_collection(request=request, foo=1) assert obj._req_permission == 'view' mock_get.assert_called_once_with( foo=1, _principals=['user', 'admin']) mock_filter.assert_has_calls([ call(request, 1), call(request, 2), ])
def test_es_docs(self): assert issubclass(es._ESDocs, list) docs = es._ESDocs() assert docs._total == 0 assert docs._start == 0