mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-07-02 18:50:57 +02:00
Perm sync behavior change (#3262)
* Change external permissions behavior * fixed behavior * added error handling * LLM the goat * comment * simplify * fixed * done * limits increased * added a ton of logging * uhhhh
This commit is contained in:
@ -14,6 +14,7 @@ from tests.integration.common_utils.managers.document_search import (
|
||||
)
|
||||
from tests.integration.common_utils.managers.llm_provider import LLMProviderManager
|
||||
from tests.integration.common_utils.managers.user import UserManager
|
||||
from tests.integration.common_utils.managers.user_group import UserGroupManager
|
||||
from tests.integration.common_utils.test_models import DATestCCPair
|
||||
from tests.integration.common_utils.test_models import DATestConnector
|
||||
from tests.integration.common_utils.test_models import DATestCredential
|
||||
@ -215,3 +216,124 @@ def test_slack_permission_sync(
|
||||
# Ensure test_user_1 can only see messages from the public channel
|
||||
assert public_message in danswer_doc_message_strings
|
||||
assert private_message not in danswer_doc_message_strings
|
||||
|
||||
|
||||
def test_slack_group_permission_sync(
|
||||
reset: None,
|
||||
vespa_client: vespa_fixture,
|
||||
slack_test_setup: tuple[dict[str, Any], dict[str, Any]],
|
||||
) -> None:
|
||||
"""
|
||||
This test ensures that permission sync overrides danswer group access.
|
||||
"""
|
||||
public_channel, private_channel = slack_test_setup
|
||||
|
||||
# Creating an admin user (first user created is automatically an admin)
|
||||
admin_user: DATestUser = UserManager.create(
|
||||
email="admin@onyx-test.com",
|
||||
)
|
||||
|
||||
# Creating a non-admin user
|
||||
test_user_1: DATestUser = UserManager.create(
|
||||
email="test_user_1@onyx-test.com",
|
||||
)
|
||||
|
||||
# Create a user group and adding the non-admin user to it
|
||||
user_group = UserGroupManager.create(
|
||||
name="test_group",
|
||||
user_ids=[test_user_1.id],
|
||||
cc_pair_ids=[],
|
||||
user_performing_action=admin_user,
|
||||
)
|
||||
UserGroupManager.wait_for_sync(
|
||||
user_groups_to_check=[user_group],
|
||||
user_performing_action=admin_user,
|
||||
)
|
||||
|
||||
slack_client = SlackManager.get_slack_client(os.environ["SLACK_BOT_TOKEN"])
|
||||
email_id_map = SlackManager.build_slack_user_email_id_map(slack_client)
|
||||
admin_user_id = email_id_map[admin_user.email]
|
||||
|
||||
LLMProviderManager.create(user_performing_action=admin_user)
|
||||
|
||||
# Add only admin to the private channel
|
||||
SlackManager.set_channel_members(
|
||||
slack_client=slack_client,
|
||||
admin_user_id=admin_user_id,
|
||||
channel=private_channel,
|
||||
user_ids=[admin_user_id],
|
||||
)
|
||||
|
||||
before = datetime.now(timezone.utc)
|
||||
credential = CredentialManager.create(
|
||||
source=DocumentSource.SLACK,
|
||||
credential_json={
|
||||
"slack_bot_token": os.environ["SLACK_BOT_TOKEN"],
|
||||
},
|
||||
user_performing_action=admin_user,
|
||||
)
|
||||
|
||||
# Create connector with sync access and assign it to the user group
|
||||
connector = ConnectorManager.create(
|
||||
name="Slack",
|
||||
input_type=InputType.POLL,
|
||||
source=DocumentSource.SLACK,
|
||||
connector_specific_config={
|
||||
"workspace": "onyx-test-workspace",
|
||||
"channels": [private_channel["name"]],
|
||||
},
|
||||
access_type=AccessType.SYNC,
|
||||
groups=[user_group.id],
|
||||
user_performing_action=admin_user,
|
||||
)
|
||||
|
||||
cc_pair = CCPairManager.create(
|
||||
credential_id=credential.id,
|
||||
connector_id=connector.id,
|
||||
access_type=AccessType.SYNC,
|
||||
user_performing_action=admin_user,
|
||||
groups=[user_group.id],
|
||||
)
|
||||
|
||||
# Add a test message to the private channel
|
||||
private_message = "This is a secret message: 987654"
|
||||
SlackManager.add_message_to_channel(
|
||||
slack_client=slack_client,
|
||||
channel=private_channel,
|
||||
message=private_message,
|
||||
)
|
||||
|
||||
# Run indexing
|
||||
CCPairManager.run_once(cc_pair, admin_user)
|
||||
CCPairManager.wait_for_indexing(
|
||||
cc_pair=cc_pair,
|
||||
after=before,
|
||||
user_performing_action=admin_user,
|
||||
)
|
||||
|
||||
# Run permission sync
|
||||
CCPairManager.sync(
|
||||
cc_pair=cc_pair,
|
||||
user_performing_action=admin_user,
|
||||
)
|
||||
CCPairManager.wait_for_sync(
|
||||
cc_pair=cc_pair,
|
||||
after=before,
|
||||
number_of_updated_docs=1,
|
||||
user_performing_action=admin_user,
|
||||
)
|
||||
|
||||
# Verify admin can see the message
|
||||
admin_docs = DocumentSearchManager.search_documents(
|
||||
query="secret message",
|
||||
user_performing_action=admin_user,
|
||||
)
|
||||
assert private_message in admin_docs
|
||||
|
||||
# Verify test_user_1 cannot see the message despite being in the group
|
||||
# (Slack permissions should take precedence)
|
||||
user_1_docs = DocumentSearchManager.search_documents(
|
||||
query="secret message",
|
||||
user_performing_action=test_user_1,
|
||||
)
|
||||
assert private_message not in user_1_docs
|
||||
|
Reference in New Issue
Block a user