User: autorise SuperAdmin a affecter à tout dept. + modif. user par admin sous CAS

This commit is contained in:
Emmanuel Viennet 2025-01-20 21:21:36 +01:00
parent dd7d05c87e
commit f98fbd1443
3 changed files with 29 additions and 10 deletions

View File

@ -34,8 +34,10 @@
<table class="tf"> <table class="tf">
<tbody> <tbody>
{% if current_user.cas_allow_scodoc_login %}
{{ render_field(form.old_password, size=14, auth_name=auth_username, {{ render_field(form.old_password, size=14, auth_name=auth_username,
style="padding:1px; margin-left: 1em; margin-top: 4px;") }} style="padding:1px; margin-left: 1em; margin-top: 4px;") }}
{% endif %}
<tr> <tr>
<td colspan="2">Vous pouvez changer le mot de passe et/ou l'adresse email.</td> <td colspan="2">Vous pouvez changer le mot de passe et/ou l'adresse email.</td>
</tr> </tr>

View File

@ -10,14 +10,14 @@
<b>Login :</b> {{user.user_name}} <b>Login :</b> {{user.user_name}}
{% if ScoDocSiteConfig.is_cas_enabled() %} {% if ScoDocSiteConfig.is_cas_enabled() %}
(connexion via ce login ScoDoc (connexion via ce login ScoDoc
{% if user.cas_allow_scodoc_login %}autorisée{% else %}<span class="fontred">interdite</span> {% if user.can_login_using_scodoc() %}autorisée{% else %}<span class="fontred">interdite</span>
{% endif %}) {% endif %})
{% endif -%} {% endif -%}
<br> <br>
<b>CAS id:</b> {{user.cas_id or "(aucun)"}} <b>CAS id:</b> {{user.cas_id or "(aucun)"}}
{% if ScoDocSiteConfig.is_cas_enabled() %} {% if ScoDocSiteConfig.is_cas_enabled() %}
(CAS {{'autorisé' if user.cas_allow_login else 'interdit'}} pour cet utilisateur) (CAS {{'autorisé' if user.cas_allow_login else 'interdit'}} pour cet utilisateur)
{% if user.cas_allow_scodoc_login %} {% if user.can_login_using_scodoc() %}
(connexion sans CAS autorisée) (connexion sans CAS autorisée)
{% endif %} {% endif %}
{% endif %} {% endif %}

View File

@ -91,7 +91,7 @@ class ChangePasswordForm(FlaskForm):
"""formulaire changement mot de passe et mail""" """formulaire changement mot de passe et mail"""
user_name = HiddenField() user_name = HiddenField()
old_password = PasswordField(_l("Mot de passe actuel")) old_password = PasswordField(_l("Votre mot de passe"))
new_password = PasswordField(_l("Nouveau mot de passe de l'utilisateur")) new_password = PasswordField(_l("Nouveau mot de passe de l'utilisateur"))
bis_password = PasswordField( bis_password = PasswordField(
_l("Répéter"), _l("Répéter"),
@ -126,9 +126,13 @@ class ChangePasswordForm(FlaskForm):
raise ValidationError("Mot de passe trop simple, recommencez") raise ValidationError("Mot de passe trop simple, recommencez")
def validate_old_password(self, old_password): def validate_old_password(self, old_password):
"vérifie password actuel" """vérifie password de l'utilisateur qui effectue la manip.
(sauf si CAS obligatoire)
"""
if not getattr(current_user, "cas_allow_scodoc_login", True):
return # admin local sans mot de passe
if not current_user.check_password(old_password.data): if not current_user.check_password(old_password.data):
raise ValidationError("Mot de passe actuel incorrect, ré-essayez") raise ValidationError("Votre mot de passe est incorrect, ré-essayez")
class Mode(IntEnum): class Mode(IntEnum):
@ -538,7 +542,11 @@ def create_user_form(user_name=None, edit=0, all_roles=True):
else (auth_dept or "") else (auth_dept or "")
) )
if len(selectable_dept_acronyms) > 0: if len(selectable_dept_acronyms) > 0:
selectable_dept_acronyms = sorted(list(selectable_dept_acronyms)) selectable_dept_labels = sorted(list(selectable_dept_acronyms))
selectable_dept_values = selectable_dept_labels[:]
if edit and (current_user.is_administrator() or the_user.dept is None):
selectable_dept_labels.append("*Tous*")
selectable_dept_values.append("")
descr.append( descr.append(
( (
"dept", "dept",
@ -546,8 +554,8 @@ def create_user_form(user_name=None, edit=0, all_roles=True):
"title": "Département", "title": "Département",
"input_type": "menu", "input_type": "menu",
"explanation": """département de rattachement de l'utilisateur""", "explanation": """département de rattachement de l'utilisateur""",
"labels": selectable_dept_acronyms, "labels": selectable_dept_labels,
"allowed_values": selectable_dept_acronyms, "allowed_values": selectable_dept_values,
"default": default_dept, "default": default_dept,
}, },
) )
@ -753,8 +761,17 @@ def create_user_form(user_name=None, edit=0, all_roles=True):
if "status" in vals: if "status" in vals:
vals["active"] = vals["status"] == "" vals["active"] = vals["status"] == ""
# Département: # Département:
if ("dept" in vals) and (vals["dept"] not in selectable_dept_acronyms): if "dept" in vals:
if vals["dept"] not in selectable_dept_values:
del vals["dept"] # ne change pas de dept del vals["dept"] # ne change pas de dept
else:
vals["dept"] = vals["dept"] or None
if (
vals["dept"] is None
and the_user.dept is not None
and not current_user.is_administrator()
):
del vals["dept"] # seul super admin peut affecter à tous
# Traitement des roles: ne doit pas affecter les rôles # Traitement des roles: ne doit pas affecter les rôles
# que l'on en contrôle pas: # que l'on en contrôle pas:
for role in orig_roles_strings: # { "Ens_RT", "Secr_CJ", ... } for role in orig_roles_strings: # { "Ens_RT", "Secr_CJ", ... }