mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-09-12 01:03:09 +00:00
Add club manager acl for user search
This commit is contained in:
parent
52f31f02e2
commit
15bcb0c280
3 changed files with 46 additions and 1 deletions
|
@ -184,8 +184,11 @@ class AutocompleteViewMixin(LoginRequiredMixin, autocomplete.Select2QuerySetView
|
|||
def get_queryset(self):
|
||||
|
||||
can, reason, _permission, query_set = self.obj_type.can_list(self.request.user)
|
||||
if query_set:
|
||||
self.query_set = query_set
|
||||
else:
|
||||
self.query_set = self.obj_type.objects.none()
|
||||
|
||||
self.query_set = query_set
|
||||
if hasattr(self, "filter_results"):
|
||||
self.filter_results()
|
||||
else:
|
||||
|
|
|
@ -2065,6 +2065,33 @@ class Adherent(User):
|
|||
("users.add_user",),
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def can_list(cls, user_request, *_args, **_kwargs):
|
||||
"""Users can list adherent only if they are :
|
||||
- Members of view acl,
|
||||
- Club administrator.
|
||||
|
||||
:param user_request: The user who wants to view the list.
|
||||
:return: True if the user can view the list and an explanation
|
||||
message.
|
||||
|
||||
"""
|
||||
can, _message, _group = Club.can_view_all(user_request)
|
||||
if user_request.has_perm("users.view_user") or can:
|
||||
return (
|
||||
True,
|
||||
None,
|
||||
None,
|
||||
cls.objects.all()
|
||||
)
|
||||
else:
|
||||
return (
|
||||
False,
|
||||
_("You don't have the right to list all adherents."),
|
||||
("users.view_user",),
|
||||
cls.objects.none(),
|
||||
)
|
||||
|
||||
def clean(self, *args, **kwargs):
|
||||
"""Method, clean and validate the gpgfp value.
|
||||
|
||||
|
|
|
@ -81,6 +81,21 @@ class UserAutocomplete(AutocompleteViewMixin):
|
|||
class AdherentAutocomplete(AutocompleteViewMixin):
|
||||
obj_type = Adherent
|
||||
|
||||
# Precision on search to add annotations so search behaves more like users expect it to
|
||||
def filter_results(self):
|
||||
# Comments explain what we try to match
|
||||
self.query_set = self.query_set.annotate(
|
||||
full_name=Concat("name", Value(" "), "surname"), # Match when the user searches "Toto Passoir"
|
||||
full_name_reverse=Concat("surname", Value(" "), "name"), # Match when the user searches "Passoir Toto"
|
||||
).all()
|
||||
|
||||
if self.q:
|
||||
self.query_set = self.query_set.filter(
|
||||
Q(pseudo__icontains=self.q)
|
||||
| Q(full_name__icontains=self.q)
|
||||
| Q(full_name_reverse__icontains=self.q)
|
||||
)
|
||||
|
||||
#@can_view_all(Club)
|
||||
class ClubAutocomplete(AutocompleteViewMixin):
|
||||
obj_type = Club
|
||||
|
|
Loading…
Reference in a new issue