mirror of
https://github.com/open-webui/open-webui.git
synced 2026-08-13 01:02:25 -06:00
fix: enforce features.memories permission on the legacy memory context path (#27668)
Revoking a user's `features.memories` permission removed their access to the memories API and to the native function-calling memory tools, but their stored memories were still injected into the system context on the legacy function-calling path. The branch in `process_chat_payload` only checked the client-supplied `features['memory']` flag plus the global `memories.system_context.enable` switch, with no user-permission check. `add_memory_context` did not compensate: it only checks `model_allows_memory`, which is a model capability rather than a permission, and the one call inside it that does check the permission (`query_memory`) has its 403 swallowed by a `try/except`, so `Memories.get_memories_by_user_id` and the neighbourhood scan still fed the system prompt. Gate the branch with the same permission check the native path already performs in `get_builtin_tools`, matching the neighbouring `web_search` and `image_generation` branches. Only the caller's own memories were injected into the caller's own context, so there was no cross-user exposure. The practical effect was that the permission toggle did not do what its name implies: an admin who revoked it still got memory content injected for that user.
This commit is contained in:
@@ -2538,7 +2538,13 @@ async def process_chat_payload(request, form_data, user, metadata, model):
|
||||
)
|
||||
|
||||
if 'memory' in features and features['memory'] and await Config.get('memories.system_context.enable'):
|
||||
form_data = await add_memory_context(request, form_data, user, model)
|
||||
# features is client-supplied; re-check the permission the native FC path enforces.
|
||||
if getattr(user, 'role', None) == 'admin' or await has_permission(
|
||||
getattr(user, 'id', ''),
|
||||
'features.memories',
|
||||
await Config.get('user.permissions'),
|
||||
):
|
||||
form_data = await add_memory_context(request, form_data, user, model)
|
||||
|
||||
if 'web_search' in features and features['web_search']:
|
||||
# features is client-supplied; re-check the permission the native FC path enforces.
|
||||
|
||||
Reference in New Issue
Block a user