Commit 6a7a1161 authored by chrislo42's avatar chrislo42

[admin] Afficher tous les rôles d'un utilisateur

[m] Modifier get_role pour afficher tous les liens des rôles d'un utilisateur
{m] Modifier UserHelper.get_role_instance pour accepter un paramètre "role"
parent 9d1419ac
......@@ -71,14 +71,18 @@ class User(AbstractUser):
""" Renvoyer le service de l'utilisateur """
return UserHelper.get_service_instance(self)
@set_admin_info(short_description="Rôle")
@set_admin_info(short_description="Rôles")
def get_role(self):
""" Renvoyer l'objet role de l'utilisateur """
role = UserHelper.get_role_instance(self)
if role:
display = type(role)._meta.object_name
url = role.get_url()
return format_html("<a href='{url}'>{display}</a>", url=url, display=display)
roles = UserHelper.get_role_names(self)
if len(roles):
list = []
for role in roles:
role_instance = UserHelper.get_role_instance(self, role)
display = type(role_instance)._meta.object_name
url = role_instance.get_url()
list.append("<a href=" + url + ">" + display + "</a>")
return format_html(' , '.join(list))
return None
def has_role(self, role):
......
......@@ -84,10 +84,29 @@ class UserHelper:
return roles[0] if roles else None
@staticmethod
def get_role_instance(user):
def get_role_instance(user, role=None):
""" Renvoyer l'objet de rôle pour l'utilisateur """
for role in UserHelper.ROLE_TYPES:
# Tester les rôles dont le modèle est lié directement à User.agent
if not role:
for role in UserHelper.ROLE_TYPES:
# Tester les rôles dont le modèle est lié directement à User.agent
try:
if getattr(user.agent, role) is not None:
return getattr(user.agent, role)
except AttributeError:
pass
# Tester les rôles dont le modèle est lié directement à User.agentlocal
try:
if getattr(user.agentlocal, role) is not None:
return getattr(user.agentlocal, role)
except AttributeError:
pass
# Tester les rôles dont le modèle est lié directement à User
try:
if getattr(user, role) is not None:
return getattr(user, role)
except AttributeError:
pass
else:
try:
if getattr(user.agent, role) is not None:
return getattr(user.agent, role)
......@@ -105,6 +124,7 @@ class UserHelper:
return getattr(user, role)
except AttributeError:
pass
# Si les autres méthodes ne marchent pas, on suppose que parent_link a été utilisé
try:
return user.agentlocal
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment