forked from ScoDoc/ScoDoc
CLI: user-delete: renforce vérifications
This commit is contained in:
parent
3b984ea823
commit
2666d82351
33
scodoc.py
33
scodoc.py
@ -14,7 +14,8 @@ from flask.cli import with_appcontext
|
||||
from flask.templating import render_template
|
||||
from flask_login import login_user, logout_user, current_user
|
||||
import psycopg2
|
||||
import sqlalchemy
|
||||
import sqlalchemy as sa
|
||||
|
||||
|
||||
import app as mapp
|
||||
from app import create_app, cli, db
|
||||
@ -40,6 +41,8 @@ from app.models.but_refcomp import (
|
||||
)
|
||||
from app.models.but_validations import ApcValidationAnnee, ApcValidationRCUE
|
||||
from app.models.evaluations import Evaluation
|
||||
from app.models.formsemestre import notes_formsemestre_responsables
|
||||
from app.models.moduleimpls import notes_modules_enseignants
|
||||
from app.scodoc import sco_dump_db
|
||||
from app.scodoc.sco_logos import make_logo_local
|
||||
from app.scodoc.sco_permissions import Permission
|
||||
@ -214,10 +217,36 @@ def user_delete(username): # user-delete
|
||||
if not u:
|
||||
sys.stderr.write(f"user_delete: user {username} not found\n")
|
||||
return 2
|
||||
# Vérifie que l'utilisateur n'est pas... utilisé
|
||||
# - Resp. FormSemestre (table assoc)
|
||||
query = sa.select(sa.func.count()).where(
|
||||
notes_formsemestre_responsables.c.responsable_id == u.id
|
||||
)
|
||||
nb = db.session.execute(query).scalar()
|
||||
if nb > 0:
|
||||
sys.stderr.write(
|
||||
"\nuser_delete: erreur: utilisateur déclaré comme resp. de semestre\n"
|
||||
)
|
||||
return 1
|
||||
# - Resp. Module
|
||||
if ModuleImpl.query.filter_by(responsable_id=217).count() > 0:
|
||||
sys.stderr.write(
|
||||
"\nuser_delete: erreur: utilisateur déclaré comme enseignant\n"
|
||||
)
|
||||
return 1
|
||||
# - Enseignant d'un module (table assoc)
|
||||
query = sa.select(sa.func.count()).where(notes_modules_enseignants.c.ens_id == u.id)
|
||||
nb = db.session.execute(query).scalar()
|
||||
if nb > 0:
|
||||
sys.stderr.write(
|
||||
"\nuser_delete: erreur: utilisateur déclaré comme enseignant\n"
|
||||
)
|
||||
return 1
|
||||
#
|
||||
db.session.delete(u)
|
||||
try:
|
||||
db.session.commit()
|
||||
except (sqlalchemy.exc.IntegrityError, psycopg2.errors.ForeignKeyViolation):
|
||||
except (sa.exc.IntegrityError, psycopg2.errors.ForeignKeyViolation):
|
||||
sys.stderr.write(
|
||||
f"""\nuser_delete: ne peux pas supprimer l'utilisateur {username}\ncar il est associé à des objets dans ScoDoc (modules, notes, ...).\n"""
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user