forked from ScoDoc/ScoDoc
Améliore page activation module entreprises. Implements #634
This commit is contained in:
parent
ab4731bd43
commit
c2443c361f
@ -603,8 +603,19 @@ class Role(db.Model):
|
||||
"""Create default roles if missing, then, if reset_permissions,
|
||||
reset their permissions to default values.
|
||||
"""
|
||||
Role.reset_roles_permissions(
|
||||
SCO_ROLES_DEFAULTS, reset_permissions=reset_permissions
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def reset_roles_permissions(roles_perms: dict[str, tuple], reset_permissions=True):
|
||||
"""Ajoute les permissions aux roles
|
||||
roles_perms : { "role_name" : (permission, ...) }
|
||||
reset_permissions : si vrai efface permissions déja existantes
|
||||
Si le role n'existe pas, il est (re) créé.
|
||||
"""
|
||||
default_role = "Observateur"
|
||||
for role_name, permissions in SCO_ROLES_DEFAULTS.items():
|
||||
for role_name, permissions in roles_perms.items():
|
||||
role = Role.query.filter_by(name=role_name).first()
|
||||
if role is None:
|
||||
role = Role(name=role_name)
|
||||
|
@ -59,3 +59,4 @@ def check_taxe_now(taxes):
|
||||
|
||||
|
||||
from app.entreprises import routes
|
||||
from app.entreprises.activate import activate_module
|
||||
|
31
app/entreprises/activate.py
Normal file
31
app/entreprises/activate.py
Normal file
@ -0,0 +1,31 @@
|
||||
##############################################################################
|
||||
# ScoDoc
|
||||
# Copyright (c) 1999 - 2024 Emmanuel Viennet. All rights reserved.
|
||||
# See LICENSE
|
||||
##############################################################################
|
||||
|
||||
"""Activation du module entreprises
|
||||
|
||||
L'affichage du module est contrôlé par la config ScoDocConfig.enable_entreprises
|
||||
|
||||
Au moment de l'activation, il est en général utile de proposer de configurer les
|
||||
permissions de rôles standards: AdminEntreprise UtilisateurEntreprise ObservateurEntreprise
|
||||
|
||||
Voir associations dans sco_roles_default
|
||||
|
||||
"""
|
||||
from app.auth.models import Role
|
||||
from app.models import ScoDocSiteConfig
|
||||
from app.scodoc.sco_roles_default import SCO_ROLES_ENTREPRISES_DEFAULT
|
||||
|
||||
|
||||
def activate_module(
|
||||
enable: bool = True, set_default_roles_permission: bool = False
|
||||
) -> bool:
|
||||
"""Active le module et en option donne les permissions aux rôles standards.
|
||||
True si l'état d'activation a changé.
|
||||
"""
|
||||
change = ScoDocSiteConfig.enable_entreprises(enable)
|
||||
if enable and set_default_roles_permission:
|
||||
Role.reset_roles_permissions(SCO_ROLES_ENTREPRISES_DEFAULT)
|
||||
return change
|
17
app/forms/main/activate_entreprises.py
Normal file
17
app/forms/main/activate_entreprises.py
Normal file
@ -0,0 +1,17 @@
|
||||
"""
|
||||
Formulaire activation module entreprises
|
||||
"""
|
||||
|
||||
from flask_wtf import FlaskForm
|
||||
from wtforms.fields.simple import BooleanField, SubmitField
|
||||
|
||||
from app.models import ScoDocSiteConfig
|
||||
|
||||
|
||||
class ActivateEntreprisesForm(FlaskForm):
|
||||
"Formulaire activation module entreprises"
|
||||
set_default_roles_permission = BooleanField(
|
||||
"(re)mettre les rôles 'Entreprise' à leurs valeurs par défaut"
|
||||
)
|
||||
submit = SubmitField("Valider")
|
||||
cancel = SubmitField("Annuler", render_kw={"formnovalidate": True})
|
@ -54,7 +54,6 @@ class BonusConfigurationForm(FlaskForm):
|
||||
|
||||
class ScoDocConfigurationForm(FlaskForm):
|
||||
"Panneau de configuration avancée"
|
||||
enable_entreprises = BooleanField("activer le module <em>entreprises</em>")
|
||||
disable_passerelle = BooleanField( # disable car par défaut activée
|
||||
"""cacher les fonctions liées à une passerelle de publication des résultats vers les étudiants ("œil"). N'affecte pas l'API, juste la présentation."""
|
||||
)
|
||||
@ -127,13 +126,6 @@ def configuration():
|
||||
flash("Fonction bonus inchangée.")
|
||||
return redirect(url_for("scodoc.index"))
|
||||
elif form_scodoc.submit_scodoc.data and form_scodoc.validate():
|
||||
if ScoDocSiteConfig.enable_entreprises(
|
||||
enabled=form_scodoc.data["enable_entreprises"]
|
||||
):
|
||||
flash(
|
||||
"Module entreprise "
|
||||
+ ("activé" if form_scodoc.data["enable_entreprises"] else "désactivé")
|
||||
)
|
||||
if ScoDocSiteConfig.disable_passerelle(
|
||||
disabled=form_scodoc.data["disable_passerelle"]
|
||||
):
|
||||
@ -182,6 +174,7 @@ def configuration():
|
||||
|
||||
return render_template(
|
||||
"configuration.j2",
|
||||
is_entreprises_enabled=ScoDocSiteConfig.is_entreprises_enabled(),
|
||||
form_bonus=form_bonus,
|
||||
form_scodoc=form_scodoc,
|
||||
scu=scu,
|
||||
|
@ -51,7 +51,24 @@ SCO_ROLES_DEFAULTS = {
|
||||
p.UsersView,
|
||||
p.ViewEtudData,
|
||||
),
|
||||
# Rôles pour l'application relations entreprises
|
||||
# LecteurAPI peut utiliser l'API en lecture
|
||||
"LecteurAPI": (p.ScoView,),
|
||||
"Observateur": (p.Observateur,),
|
||||
# RespPE est le responsable poursuites d'études
|
||||
# il peut ajouter des tags sur les formations:
|
||||
# (doit avoir un rôle Ens en plus !)
|
||||
"RespPe": (p.EditFormationTags,),
|
||||
# Super Admin est un root: création/suppression de départements
|
||||
# _tous_ les droits
|
||||
# Afin d'avoir tous les droits, il ne doit pas être asscoié à un département
|
||||
"SuperAdmin": p.ALL_PERMISSIONS,
|
||||
}
|
||||
|
||||
# Rôles pour l'application relations entreprises
|
||||
# séparés pour pouvoir les réinitialiser lors de l'activation du module Entreprises
|
||||
# Note: Admin (chef de dept n'a par défaut aucun rôle lié à ce module)
|
||||
|
||||
SCO_ROLES_ENTREPRISES_DEFAULT = {
|
||||
# ObservateurEntreprise est un observateur de l'application entreprise
|
||||
"ObservateurEntreprise": (p.RelationsEntrepView,),
|
||||
# UtilisateurEntreprise est un utilisateur de l'application entreprise (droit de modification)
|
||||
@ -70,19 +87,10 @@ SCO_ROLES_DEFAULTS = {
|
||||
p.RelationsEntrepValidate,
|
||||
p.RelationsEntrepViewCorrs,
|
||||
),
|
||||
# LecteurAPI peut utiliser l'API en lecture
|
||||
"LecteurAPI": (p.ScoView,),
|
||||
"Observateur": (p.Observateur,),
|
||||
# RespPE est le responsable poursuites d'études
|
||||
# il peut ajouter des tags sur les formations:
|
||||
# (doit avoir un rôle Ens en plus !)
|
||||
"RespPe": (p.EditFormationTags,),
|
||||
# Super Admin est un root: création/suppression de départements
|
||||
# _tous_ les droits
|
||||
# Afin d'avoir tous les droits, il ne doit pas être asscoié à un département
|
||||
"SuperAdmin": p.ALL_PERMISSIONS,
|
||||
}
|
||||
|
||||
SCO_ROLES_DEFAULTS.update(SCO_ROLES_ENTREPRISES_DEFAULT)
|
||||
|
||||
# Les rôles accessibles via la page d'admin utilisateurs
|
||||
# - associés à un département:
|
||||
ROLES_ATTRIBUABLES_DEPT = ("Ens", "Secr", "Admin", "RespPe")
|
||||
|
51
app/templates/activate_entreprises.j2
Normal file
51
app/templates/activate_entreprises.j2
Normal file
@ -0,0 +1,51 @@
|
||||
{% extends "base.j2" %}
|
||||
{% import 'wtf.j2' as wtf %}
|
||||
|
||||
{% block app_content %}
|
||||
<h1>{{title}}</h1>
|
||||
|
||||
<div class="help">
|
||||
<p>
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-8">
|
||||
<form class="form form-horizontal spacediv" method="post" enctype="multipart/form-data" role="form">
|
||||
{{ form.hidden_tag() }}
|
||||
{{ wtf.form_errors(form, hiddens="only") }}
|
||||
|
||||
{% if is_enabled %}
|
||||
<p>Le module <em>relations entreprises</em> est actuellement activé.</p>
|
||||
<p>Il peut être activé ou désactivé à tout moment sans aucune perte de
|
||||
données (la désactivation le fait simplement disparaitre des pages
|
||||
utilisateurs).
|
||||
<p>
|
||||
{% else %}
|
||||
<p>Le module <em>relations entreprises</em> est actuellement désactivé.
|
||||
</p>
|
||||
<p>Il peut être activé ou désactivé à tout moment sans aucune perte de
|
||||
données (la désactivation le fait simplement disparaitre des pages
|
||||
utilisateurs).
|
||||
<p>
|
||||
<p>
|
||||
Lors de son activation, vous pouvez (re)positionner les rôles qu'il utilise
|
||||
à leurs valeurs par défaut en cochant la case ci-dessous.
|
||||
</p>
|
||||
{{ wtf.form_field(form.set_default_roles_permission) }}
|
||||
{% endif %}
|
||||
<div class="form-group spacediv">
|
||||
{{ wtf.form_field(form.submit) }}
|
||||
{{ wtf.form_field(form.cancel) }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<style>
|
||||
.spacediv {
|
||||
margin-top: 16px;
|
||||
}
|
||||
</style>
|
||||
|
||||
{% endblock %}
|
@ -39,6 +39,18 @@ Heure: <b><tt>{{ time.strftime("%d/%m/%Y %H:%M") }}</tt></b>
|
||||
|
||||
<div class="scobox">
|
||||
<div class="scobox-title">ScoDoc : paramètres généraux</div>
|
||||
|
||||
<div style="margin-top: 16px;">
|
||||
Le module <em>Relations Entreprises</em>
|
||||
{% if is_entreprises_enabled %}
|
||||
est <b>activé</b>
|
||||
{% else %}
|
||||
n'est pas activé
|
||||
{% endif %}
|
||||
: <a class="stdlink" href="{{url_for('scodoc.activate_entreprises')
|
||||
}}">{% if is_entreprises_enabled %}le désactiver{%else%}l'activer{%endif%}</a>
|
||||
</div>
|
||||
|
||||
<form id="configuration_form_scodoc" class="sco-form" action="" method="post" enctype="multipart/form-data" novalidate>
|
||||
{{ form_scodoc.hidden_tag() }}
|
||||
<div class="row">
|
||||
|
@ -53,6 +53,7 @@ from werkzeug.exceptions import BadRequest, NotFound
|
||||
|
||||
|
||||
from app import db, log
|
||||
from app import entreprises
|
||||
from app.auth.models import User, Role
|
||||
from app.auth.cas import set_cas_configuration
|
||||
from app.decorators import (
|
||||
@ -62,6 +63,7 @@ from app.decorators import (
|
||||
)
|
||||
from app.forms.generic import SimpleConfirmationForm
|
||||
from app.forms.main import config_logos, config_main
|
||||
from app.forms.main.activate_entreprises import ActivateEntreprisesForm
|
||||
from app.forms.main.config_assiduites import ConfigAssiduitesForm
|
||||
from app.forms.main.config_apo import CodesDecisionsForm
|
||||
from app.forms.main.config_cas import ConfigCASForm
|
||||
@ -484,6 +486,38 @@ def config_personalized_links():
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/ScoDoc/activate_entreprises", methods=["GET", "POST"])
|
||||
@admin_required
|
||||
def activate_entreprises():
|
||||
"""Form activation module entreprises"""
|
||||
is_enabled = ScoDocSiteConfig.is_entreprises_enabled()
|
||||
form = ActivateEntreprisesForm(
|
||||
data={
|
||||
"set_default_roles_permission": True,
|
||||
}
|
||||
)
|
||||
if request.method == "POST" and form.cancel.data: # cancel button
|
||||
return redirect(url_for("scodoc.configuration"))
|
||||
if form.validate_on_submit():
|
||||
if entreprises.activate_module(
|
||||
enable=not is_enabled,
|
||||
set_default_roles_permission=form.data["set_default_roles_permission"],
|
||||
):
|
||||
flash("Module entreprise " + ("activé" if not is_enabled else "désactivé"))
|
||||
return redirect(url_for("scodoc.configuration"))
|
||||
|
||||
if is_enabled:
|
||||
form.submit.label.text = "Désactiver le module relations entreprises"
|
||||
else:
|
||||
form.submit.label.text = "Activer le module relations entreprises"
|
||||
return render_template(
|
||||
"activate_entreprises.j2",
|
||||
form=form,
|
||||
is_enabled=is_enabled,
|
||||
title="Activation module Relations Entreprises",
|
||||
)
|
||||
|
||||
|
||||
@bp.route("/ScoDoc/table_etud_in_accessible_depts", methods=["POST"])
|
||||
@login_required
|
||||
def table_etud_in_accessible_depts():
|
||||
|
Loading…
Reference in New Issue
Block a user