Assiduites : Permissions

This commit is contained in:
iziram 2023-06-30 17:24:16 +02:00
parent ff2b27e1d9
commit 467c29d947
10 changed files with 47 additions and 65 deletions

View File

@ -345,8 +345,7 @@ def count_assiduites_formsemestre(
@scodoc @scodoc
@as_json @as_json
@login_required @login_required
@permission_required(Permission.ScoView) @permission_required(Permission.ScoAssiduiteChange)
# @permission_required(Permission.ScoAssiduiteChange)
def assiduite_create(etudid: int = None): def assiduite_create(etudid: int = None):
""" """
Création d'une assiduité pour l'étudiant (etudid) Création d'une assiduité pour l'étudiant (etudid)
@ -395,8 +394,7 @@ def assiduite_create(etudid: int = None):
@scodoc @scodoc
@as_json @as_json
@login_required @login_required
@permission_required(Permission.ScoView) @permission_required(Permission.ScoAssiduiteChange)
# @permission_required(Permission.ScoAssiduiteChange)
def assiduites_create(): def assiduites_create():
""" """
Création d'une assiduité ou plusieurs assiduites Création d'une assiduité ou plusieurs assiduites
@ -523,8 +521,7 @@ def _create_singular(
@login_required @login_required
@scodoc @scodoc
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoAssiduiteChange)
# @permission_required(Permission.ScoAssiduiteChange)
def assiduite_delete(): def assiduite_delete():
""" """
Suppression d'une assiduité à partir de son id Suppression d'une assiduité à partir de son id
@ -569,8 +566,7 @@ def _delete_singular(assiduite_id: int, database):
@login_required @login_required
@scodoc @scodoc
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoAssiduiteChange)
# @permission_required(Permission.ScoAssiduiteChange)
def assiduite_edit(assiduite_id: int): def assiduite_edit(assiduite_id: int):
""" """
Edition d'une assiduité à partir de son id Edition d'une assiduité à partir de son id
@ -646,8 +642,7 @@ def assiduite_edit(assiduite_id: int):
@login_required @login_required
@scodoc @scodoc
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoAssiduiteChange)
# @permission_required(Permission.ScoAssiduiteChange)
def assiduites_edit(): def assiduites_edit():
""" """
Edition d'une assiduité à partir de son id Edition d'une assiduité à partir de son id

View File

@ -135,8 +135,7 @@ def justificatifs_dept(dept_id: int = None, with_query: bool = False):
@scodoc @scodoc
@login_required @login_required
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifChange)
# @permission_required(Permission.ScoAssiduiteChange)
def justif_create(etudid: int = None): def justif_create(etudid: int = None):
""" """
Création d'un justificatif pour l'étudiant (etudid) Création d'un justificatif pour l'étudiant (etudid)
@ -251,8 +250,7 @@ def _create_singular(
@login_required @login_required
@scodoc @scodoc
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifChange)
# @permission_required(Permission.ScoAssiduiteChange)
def justif_edit(justif_id: int): def justif_edit(justif_id: int):
""" """
Edition d'un justificatif à partir de son id Edition d'un justificatif à partir de son id
@ -343,8 +341,7 @@ def justif_edit(justif_id: int):
@login_required @login_required
@scodoc @scodoc
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifChange)
# @permission_required(Permission.ScoAssiduiteChange)
def justif_delete(): def justif_delete():
""" """
Suppression d'un justificatif à partir de son id Suppression d'un justificatif à partir de son id
@ -405,8 +402,7 @@ def _delete_singular(justif_id: int, database):
@scodoc @scodoc
@login_required @login_required
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifChange)
# @permission_required(Permission.ScoAssiduiteChange)
def justif_import(justif_id: int = None): def justif_import(justif_id: int = None):
""" """
Importation d'un fichier (création d'archive) Importation d'un fichier (création d'archive)
@ -450,8 +446,7 @@ def justif_import(justif_id: int = None):
@api_web_bp.route("/justificatif/<int:justif_id>/export/<filename>", methods=["POST"]) @api_web_bp.route("/justificatif/<int:justif_id>/export/<filename>", methods=["POST"])
@scodoc @scodoc
@login_required @login_required
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifView)
# @permission_required(Permission.ScoAssiduiteChange)
def justif_export(justif_id: int = None, filename: str = None): def justif_export(justif_id: int = None, filename: str = None):
""" """
Retourne un fichier d'une archive d'un justificatif Retourne un fichier d'une archive d'un justificatif
@ -482,8 +477,7 @@ def justif_export(justif_id: int = None, filename: str = None):
@scodoc @scodoc
@login_required @login_required
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifChange)
# @permission_required(Permission.ScoAssiduiteChange)
def justif_remove(justif_id: int = None): def justif_remove(justif_id: int = None):
""" """
Supression d'un fichier ou d'une archive Supression d'un fichier ou d'une archive
@ -547,8 +541,7 @@ def justif_remove(justif_id: int = None):
@scodoc @scodoc
@login_required @login_required
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifView)
# @permission_required(Permission.ScoAssiduiteChange)
def justif_list(justif_id: int = None): def justif_list(justif_id: int = None):
""" """
Liste les fichiers du justificatif Liste les fichiers du justificatif
@ -579,8 +572,7 @@ def justif_list(justif_id: int = None):
@scodoc @scodoc
@login_required @login_required
@as_json @as_json
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifChange)
# @permission_required(Permission.ScoAssiduiteChange)
def justif_justifies(justif_id: int = None): def justif_justifies(justif_id: int = None):
""" """
Liste assiduite_id justifiées par le justificatif Liste assiduite_id justifiées par le justificatif

View File

@ -6,6 +6,7 @@ from datetime import datetime
from app import db from app import db
from app.models import ModuleImpl from app.models import ModuleImpl
from app.models.etudiants import Identite from app.models.etudiants import Identite
from app.auth.models import User
from app.scodoc.sco_utils import ( from app.scodoc.sco_utils import (
EtatAssiduite, EtatAssiduite,
EtatJustificatif, EtatJustificatif,
@ -67,9 +68,15 @@ class Assiduite(db.Model):
def to_dict(self, format_api=True) -> dict: def to_dict(self, format_api=True) -> dict:
"""Retourne la représentation json de l'assiduité""" """Retourne la représentation json de l'assiduité"""
etat = self.etat etat = self.etat
username = self.user_id
if format_api: if format_api:
etat = EtatAssiduite.inverse().get(self.etat).name etat = EtatAssiduite.inverse().get(self.etat).name
if self.user_id is not None:
user: User = User.query.get(self.user_id)
if user is None:
username = "Non renseigné"
else:
username = user.get_prenomnom()
data = { data = {
"assiduite_id": self.id, "assiduite_id": self.id,
"etudid": self.etudid, "etudid": self.etudid,
@ -79,7 +86,7 @@ class Assiduite(db.Model):
"etat": etat, "etat": etat,
"desc": self.desc, "desc": self.desc,
"entry_date": self.entry_date, "entry_date": self.entry_date,
"user_id": self.user_id, "user_id": username,
"est_just": self.est_just, "est_just": self.est_just,
} }
return data return data
@ -212,9 +219,16 @@ class Justificatif(db.Model):
"""transformation de l'objet en dictionnaire sérialisable""" """transformation de l'objet en dictionnaire sérialisable"""
etat = self.etat etat = self.etat
username = self.user_id
if format_api: if format_api:
etat = EtatJustificatif.inverse().get(self.etat).name etat = EtatJustificatif.inverse().get(self.etat).name
if self.user_id is not None:
user: User = User.query.get(self.user_id)
if user is None:
username = "Non renseigné"
else:
username = user.get_prenomnom()
data = { data = {
"justif_id": self.justif_id, "justif_id": self.justif_id,
@ -225,7 +239,7 @@ class Justificatif(db.Model):
"raison": self.raison, "raison": self.raison,
"fichier": self.fichier, "fichier": self.fichier,
"entry_date": self.entry_date, "entry_date": self.entry_date,
"user_id": self.user_id, "user_id": username,
} }
return data return data

View File

@ -57,6 +57,10 @@ _SCO_PERMISSIONS = (
(1 << 29, "ScoUsersChangeCASId", "Paramétrer l'id CAS"), (1 << 29, "ScoUsersChangeCASId", "Paramétrer l'id CAS"),
# #
(1 << 40, "ScoEtudChangePhoto", "Modifier la photo d'un étudiant"), (1 << 40, "ScoEtudChangePhoto", "Modifier la photo d'un étudiant"),
# Permissions du module Assiduité)
(1 << 50, "ScoAssiduiteChange", "Modifier des assiduités"),
(1 << 51, "ScoJustifChange", "Modifier des justificatifs"),
(1 << 52, "ScoJustifView", "Visualisation des fichiers justificatifs"),
# Attention: les permissions sont codées sur 64 bits. # Attention: les permissions sont codées sur 64 bits.
) )
@ -71,7 +75,7 @@ class Permission:
@staticmethod @staticmethod
def init_permissions(): def init_permissions():
for (perm, symbol, description) in _SCO_PERMISSIONS: for perm, symbol, description in _SCO_PERMISSIONS:
setattr(Permission, symbol, perm) setattr(Permission, symbol, perm)
Permission.description[symbol] = description Permission.description[symbol] = description
Permission.permission_by_name[symbol] = perm Permission.permission_by_name[symbol] = perm

View File

@ -1317,29 +1317,6 @@ function generateAllEtudRow() {
// <<== Gestion de la récupération d'informations ==>> // <<== Gestion de la récupération d'informations ==>>
/**
* Récupération d'un nom d'utilisateur à partir d'un identifiant
* @param {Number} id identifiant de l'utilisateur
* @returns {String} le nom de l'utilisateur ou son pseudo ou "Non Renseigné"
*/
function getUserFromId(id) {
if (id == "") {
return "Non Renseigné";
}
let name = "Non Renseigné";
sync_get(getUrl() + `/api/user/${id}`, (data) => {
if (data.nom != "" && data.prenom != "") {
name = `${data.nom} ${data.prenom}`;
} else {
name = data.user_name;
}
});
return name;
}
/** /**
* Récupération des ids des groupes * Récupération des ids des groupes
* @returns la liste des ids des groupes * @returns la liste des ids des groupes

View File

@ -207,7 +207,7 @@
).textContent = `saisi le ${formatDateModal( ).textContent = `saisi le ${formatDateModal(
assiduite.entry_date, assiduite.entry_date,
"à" "à"
)} \npar ${getUserFromId(assiduite.user_id)}`; )} \npar ${assiduite.user_id}`;
document.getElementById("modal-assiduite-module").textContent = document.getElementById("modal-assiduite-module").textContent =
assiduite.moduleimpl_id; assiduite.moduleimpl_id;
document.getElementById("modal-assiduite-deb").textContent = formatDateModal( document.getElementById("modal-assiduite-deb").textContent = formatDateModal(
@ -438,7 +438,7 @@
userIdDiv.textContent = `saisi le ${formatDateModal( userIdDiv.textContent = `saisi le ${formatDateModal(
assiduite.entry_date, assiduite.entry_date,
"à" "à"
)} \npar ${getUserFromId(assiduite.user_id)}`; )} \npar ${assiduite.user_id}`;
infoContainer.appendChild(userIdDiv); infoContainer.appendChild(userIdDiv);
el.appendChild(infoContainer); el.appendChild(infoContainer);

View File

@ -162,7 +162,7 @@
userIdDiv.textContent = `saisi le ${formatDateModal( userIdDiv.textContent = `saisi le ${formatDateModal(
assiduite.entry_date, assiduite.entry_date,
"à" "à"
)} \npar ${getUserFromId(assiduite.user_id)}`; )} \npar ${assiduite.user_id}`;
bubble.appendChild(userIdDiv); bubble.appendChild(userIdDiv);
bubble.style.left = `${event.clientX - bubble.offsetWidth / 2}px`; bubble.style.left = `${event.clientX - bubble.offsetWidth / 2}px`;

View File

@ -124,7 +124,7 @@
async_get( async_get(
path, path,
(data) => { (data) => {
const user = getUserFromId(data.user_id); const user = data.user_id;
const module = getModuleImpl(data.moduleimpl_id); const module = getModuleImpl(data.moduleimpl_id);
const date_debut = moment.tz(data.date_debut, TIMEZONE).format("DD/MM/YYYY HH:mm"); const date_debut = moment.tz(data.date_debut, TIMEZONE).format("DD/MM/YYYY HH:mm");

View File

@ -119,7 +119,7 @@
async_get( async_get(
path, path,
(data) => { (data) => {
const user = getUserFromId(data.user_id); const user = data.user_id;
const date_debut = moment.tz(data.date_debut, TIMEZONE).format("DD/MM/YYYY HH:mm"); const date_debut = moment.tz(data.date_debut, TIMEZONE).format("DD/MM/YYYY HH:mm");
const date_fin = moment.tz(data.date_fin, TIMEZONE).format("DD/MM/YYYY HH:mm"); const date_fin = moment.tz(data.date_fin, TIMEZONE).format("DD/MM/YYYY HH:mm");
const entry_date = moment.tz(data.entry_date, TIMEZONE).format("DD/MM/YYYY HH:mm"); const entry_date = moment.tz(data.entry_date, TIMEZONE).format("DD/MM/YYYY HH:mm");

View File

@ -122,7 +122,7 @@ class HTMLBuilder:
@bp.route("/") @bp.route("/")
@bp.route("/index_html") @bp.route("/index_html")
@scodoc @scodoc
@permission_required(Permission.ScoView) @permission_required(Permission.ScoJustifChange)
def index_html(): def index_html():
"""Gestionnaire assiduités, page principale""" """Gestionnaire assiduités, page principale"""
H = [ H = [
@ -174,7 +174,7 @@ def index_html():
@bp.route("/SignaleAssiduiteEtud") @bp.route("/SignaleAssiduiteEtud")
@scodoc @scodoc
@permission_required(Permission.ScoAbsChange) @permission_required(Permission.ScoAssiduiteChange)
def signal_assiduites_etud(): def signal_assiduites_etud():
""" """
signal_assiduites_etud Saisie de l'assiduité d'un étudiant signal_assiduites_etud Saisie de l'assiduité d'un étudiant
@ -242,7 +242,7 @@ def signal_assiduites_etud():
@bp.route("/ListeAssiduitesEtud") @bp.route("/ListeAssiduitesEtud")
@scodoc @scodoc
@permission_required(Permission.ScoAbsChange) @permission_required(Permission.ScoView)
def liste_assiduites_etud(): def liste_assiduites_etud():
""" """
liste_assiduites_etud Affichage de toutes les assiduites et justificatifs d'un etudiant liste_assiduites_etud Affichage de toutes les assiduites et justificatifs d'un etudiant
@ -284,7 +284,7 @@ def liste_assiduites_etud():
@bp.route("/BilanEtud") @bp.route("/BilanEtud")
@scodoc @scodoc
@permission_required(Permission.ScoAbsChange) @permission_required(Permission.ScoView)
def bilan_etud(): def bilan_etud():
""" """
bilan_etud Affichage de toutes les assiduites et justificatifs d'un etudiant bilan_etud Affichage de toutes les assiduites et justificatifs d'un etudiant
@ -338,7 +338,7 @@ def bilan_etud():
@bp.route("/AjoutJustificatifEtud") @bp.route("/AjoutJustificatifEtud")
@scodoc @scodoc
@permission_required(Permission.ScoAbsChange) @permission_required(Permission.ScoJustifChange)
def ajout_justificatif_etud(): def ajout_justificatif_etud():
""" """
ajout_justificatif_etud : Affichage et création/modification des justificatifs de l'étudiant ajout_justificatif_etud : Affichage et création/modification des justificatifs de l'étudiant
@ -423,7 +423,7 @@ def calendrier_etud():
@bp.route("/SignalAssiduiteGr") @bp.route("/SignalAssiduiteGr")
@scodoc @scodoc
@permission_required(Permission.ScoAbsChange) @permission_required(Permission.ScoAssiduiteChange)
def signal_assiduites_group(): def signal_assiduites_group():
""" """
signal_assiduites_group Saisie des assiduités des groupes pour le jour donnée signal_assiduites_group Saisie des assiduités des groupes pour le jour donnée
@ -641,7 +641,7 @@ def get_etat_abs_date():
@bp.route("/SignalAssiduiteDifferee") @bp.route("/SignalAssiduiteDifferee")
@scodoc @scodoc
@permission_required(Permission.ScoAbsChange) @permission_required(Permission.ScoAssiduiteChange)
def signal_assiduites_diff(): def signal_assiduites_diff():
group_ids: list[int] = request.args.get("group_ids", None) group_ids: list[int] = request.args.get("group_ids", None)
formsemestre_id: int = request.args.get("formsemestre_id", -1) formsemestre_id: int = request.args.get("formsemestre_id", -1)