Example #1
0
    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)])
Example #3
0
 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
Example #5
0
 def test_es_docs(self):
     assert issubclass(es._ESDocs, list)
     docs = es._ESDocs()
     assert docs._total == 0
     assert docs._start == 0