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

View File

@ -10,14 +10,14 @@
<b>Login :</b> {{user.user_name}}
{% if ScoDocSiteConfig.is_cas_enabled() %}
(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 -%}
<br>
<b>CAS id:</b> {{user.cas_id or "(aucun)"}}
{% if ScoDocSiteConfig.is_cas_enabled() %}
(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)
{% endif %}
{% endif %}

View File

@ -91,7 +91,7 @@ class ChangePasswordForm(FlaskForm):
"""formulaire changement mot de passe et mail"""
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"))
bis_password = PasswordField(
_l("Répéter"),
@ -126,9 +126,13 @@ class ChangePasswordForm(FlaskForm):
raise ValidationError("Mot de passe trop simple, recommencez")
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):
raise ValidationError("Mot de passe actuel incorrect, ré-essayez")
raise ValidationError("Votre mot de passe est incorrect, ré-essayez")
class Mode(IntEnum):
@ -538,7 +542,11 @@ def create_user_form(user_name=None, edit=0, all_roles=True):
else (auth_dept or "")
)
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(
(
"dept",
@ -546,8 +554,8 @@ def create_user_form(user_name=None, edit=0, all_roles=True):
"title": "Département",
"input_type": "menu",
"explanation": """département de rattachement de l'utilisateur""",
"labels": selectable_dept_acronyms,
"allowed_values": selectable_dept_acronyms,
"labels": selectable_dept_labels,
"allowed_values": selectable_dept_values,
"default": default_dept,
},
)
@ -753,8 +761,17 @@ def create_user_form(user_name=None, edit=0, all_roles=True):
if "status" in vals:
vals["active"] = vals["status"] == ""
# 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
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
# que l'on en contrôle pas:
for role in orig_roles_strings: # { "Ens_RT", "Secr_CJ", ... }