Merge pull request #3972 from ostcar/websocket_use_restricted_data
Fix error, that user get full_data when restricted_data_cache was enabled
This commit is contained in:
commit
f4f3ab9c49
@ -2,7 +2,7 @@ from collections import defaultdict
|
|||||||
from typing import Any, Dict, List
|
from typing import Any, Dict, List
|
||||||
from urllib.parse import parse_qs
|
from urllib.parse import parse_qs
|
||||||
|
|
||||||
from .auth import async_anonymous_is_enabled
|
from .auth import async_anonymous_is_enabled, user_to_collection_user
|
||||||
from .cache import element_cache, split_element_id
|
from .cache import element_cache, split_element_id
|
||||||
from .collection import AutoupdateFormat
|
from .collection import AutoupdateFormat
|
||||||
from .websocket import ProtocollAsyncJsonWebsocketConsumer, get_element_data
|
from .websocket import ProtocollAsyncJsonWebsocketConsumer, get_element_data
|
||||||
@ -48,7 +48,7 @@ class SiteConsumer(ProtocollAsyncJsonWebsocketConsumer):
|
|||||||
|
|
||||||
if change_id is not None:
|
if change_id is not None:
|
||||||
try:
|
try:
|
||||||
data = await get_element_data(self.scope['user'], change_id)
|
data = await get_element_data(user_to_collection_user(self.scope['user']), change_id)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
# When the change_id is to big, do nothing
|
# When the change_id is to big, do nothing
|
||||||
pass
|
pass
|
||||||
@ -86,7 +86,10 @@ class SiteConsumer(ProtocollAsyncJsonWebsocketConsumer):
|
|||||||
Send changed or deleted elements to the user.
|
Send changed or deleted elements to the user.
|
||||||
"""
|
"""
|
||||||
change_id = event['change_id']
|
change_id = event['change_id']
|
||||||
changed_elements, deleted_elements_ids = await element_cache.get_restricted_data(self.scope['user'], change_id, max_change_id=change_id)
|
changed_elements, deleted_elements_ids = await element_cache.get_restricted_data(
|
||||||
|
user_to_collection_user(self.scope['user']),
|
||||||
|
change_id,
|
||||||
|
max_change_id=change_id)
|
||||||
|
|
||||||
deleted_elements: Dict[str, List[int]] = defaultdict(list)
|
deleted_elements: Dict[str, List[int]] = defaultdict(list)
|
||||||
for element_id in deleted_elements_ids:
|
for element_id in deleted_elements_ids:
|
||||||
|
@ -92,6 +92,29 @@ async def test_connection_with_change_id(get_communicator):
|
|||||||
assert TUser().get_collection_string() in content['changed']
|
assert TUser().get_collection_string() in content['changed']
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.asyncio
|
||||||
|
async def test_connection_with_change_id_get_restricted_data_with_restricted_data_cache(get_communicator):
|
||||||
|
"""
|
||||||
|
Test, that the returned data is the restricted_data when restricted_data_cache is activated
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# Save the value of use_restricted_data_cache
|
||||||
|
original_use_restricted_data = element_cache.use_restricted_data_cache
|
||||||
|
element_cache.use_restricted_data_cache = True
|
||||||
|
|
||||||
|
await set_config('general_system_enable_anonymous', True)
|
||||||
|
communicator = get_communicator('change_id=0')
|
||||||
|
await communicator.connect()
|
||||||
|
|
||||||
|
response = await communicator.receive_json_from()
|
||||||
|
|
||||||
|
content = response.get('content')
|
||||||
|
assert content['changed']['app/collection1'][0]['value'] == 'restricted_value1'
|
||||||
|
finally:
|
||||||
|
# reset the value of use_restricted_data_cache
|
||||||
|
element_cache.use_restricted_data_cache = original_use_restricted_data
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_connection_with_invalid_change_id(get_communicator):
|
async def test_connection_with_invalid_change_id(get_communicator):
|
||||||
await set_config('general_system_enable_anonymous', True)
|
await set_config('general_system_enable_anonymous', True)
|
||||||
|
Loading…
Reference in New Issue
Block a user