Respect model perms for global search

This commit is contained in:
shamoon 2024-03-31 21:47:10 -07:00
parent 9004000c1a
commit 6e6454e597

View File

@ -1111,46 +1111,87 @@ class GlobalSearchView(PassUserMixin):
return HttpResponseBadRequest("Query must be at least 3 characters") return HttpResponseBadRequest("Query must be at least 3 characters")
docs = [] docs = []
from documents import index if request.user.has_perm("documents.view_document"):
from documents import index
with index.open_index_searcher() as s: with index.open_index_searcher() as s:
q, _ = index.DelayedFullTextQuery( q, _ = index.DelayedFullTextQuery(
s, s,
request.query_params, request.query_params,
10, 10,
request.user, request.user,
)._get_query() )._get_query()
results = s.search(q, limit=3) results = s.search(q, limit=3)
docs = get_objects_for_user_owner_aware( docs = get_objects_for_user_owner_aware(
request.user, request.user,
"view_document", "view_document",
Document, Document,
).filter(id__in=[r["id"] for r in results]) ).filter(id__in=[r["id"] for r in results])
tags = get_objects_for_user_owner_aware(request.user, "view_tag", Tag).filter( tags = (
name__contains=query, get_objects_for_user_owner_aware(request.user, "view_tag", Tag).filter(
)[:3] name__contains=query,
correspondents = get_objects_for_user_owner_aware( )[:3]
request.user, if request.user.has_perm("documents.view_tag")
"view_correspondent", else []
Correspondent, )
).filter(name__contains=query)[:3] correspondents = (
document_types = get_objects_for_user_owner_aware( get_objects_for_user_owner_aware(
request.user, request.user,
"view_documenttype", "view_correspondent",
DocumentType, Correspondent,
).filter(name__contains=query)[:3] ).filter(name__contains=query)[:3]
storage_paths = get_objects_for_user_owner_aware( if request.user.has_perm("documents.view_correspondent")
request.user, else []
"view_storagepath", )
StoragePath, document_types = (
).filter(name__contains=query)[:3] get_objects_for_user_owner_aware(
users = User.objects.filter(username__contains=query)[:3] request.user,
groups = Group.objects.filter(name__contains=query)[:3] "view_documenttype",
mail_rules = MailRule.objects.filter(name__contains=query)[:3] DocumentType,
mail_accounts = MailAccount.objects.filter(name__contains=query)[:3] ).filter(name__contains=query)[:3]
workflows = Workflow.objects.filter(name__contains=query)[:3] if request.user.has_perm("documents.view_documenttype")
custom_fields = CustomField.objects.filter(name__contains=query)[:3] else []
)
storage_paths = (
get_objects_for_user_owner_aware(
request.user,
"view_storagepath",
StoragePath,
).filter(name__contains=query)[:3]
if request.user.has_perm("documents.view_storagepath")
else []
)
users = (
User.objects.filter(username__contains=query)[:3]
if request.user.has_perm("documents.view_user")
else []
)
groups = (
Group.objects.filter(name__contains=query)[:3]
if request.user.has_perm("documents.view_group")
else []
)
mail_rules = (
MailRule.objects.filter(name__contains=query)[:3]
if request.user.has_perm("documents.view_mailrule")
else []
)
mail_accounts = (
MailAccount.objects.filter(name__contains=query)[:3]
if request.user.has_perm("documents.view_mailaccount")
else []
)
workflows = (
Workflow.objects.filter(name__contains=query)[:3]
if request.user.has_perm("documents.view_workflow")
else []
)
custom_fields = (
CustomField.objects.filter(name__contains=query)[:3]
if request.user.has_perm("documents.view_customfield")
else []
)
context = { context = {
"request": request, "request": request,