forked from ScoDoc/ScoDoc
API: décorateur api_permission_required pour la documentation
This commit is contained in:
parent
650afd5c03
commit
7623ccef2b
@ -1,10 +1,14 @@
|
|||||||
"""api.__init__
|
"""api.__init__
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from functools import wraps
|
||||||
|
|
||||||
from flask_json import as_json
|
from flask_json import as_json
|
||||||
from flask import Blueprint
|
from flask import Blueprint
|
||||||
from flask import request, g
|
from flask import current_app, g, request
|
||||||
from flask_login import current_user
|
from flask_login import current_user
|
||||||
from app import db
|
from app import db
|
||||||
|
from app.decorators import permission_required
|
||||||
from app.scodoc import sco_utils as scu
|
from app.scodoc import sco_utils as scu
|
||||||
from app.scodoc.sco_exceptions import AccessDenied, ScoException
|
from app.scodoc.sco_exceptions import AccessDenied, ScoException
|
||||||
from app.scodoc.sco_permissions import Permission
|
from app.scodoc.sco_permissions import Permission
|
||||||
@ -16,6 +20,28 @@ api_web_bp = Blueprint("apiweb", __name__)
|
|||||||
API_CLIENT_ERROR = 400 # erreur dans les paramètres fournis par le client
|
API_CLIENT_ERROR = 400 # erreur dans les paramètres fournis par le client
|
||||||
|
|
||||||
|
|
||||||
|
def api_permission_required(permission):
|
||||||
|
"""Ce décorateur fait la même chose que @permission_required
|
||||||
|
mais enregistre dans l'attribut .scodoc_permission
|
||||||
|
de la fonction la valeur de la permission.
|
||||||
|
Cette valeur n'est utilisée que pour la génération automatique de la documentation.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def decorator(f):
|
||||||
|
f.scodoc_permission = permission
|
||||||
|
|
||||||
|
@wraps(f)
|
||||||
|
def decorated_function(*args, **kwargs):
|
||||||
|
scodoc_dept = getattr(g, "scodoc_dept", None)
|
||||||
|
if not current_user.has_permission(permission, scodoc_dept):
|
||||||
|
return current_app.login_manager.unauthorized()
|
||||||
|
return f(*args, **kwargs)
|
||||||
|
|
||||||
|
return decorated_function
|
||||||
|
|
||||||
|
return decorator
|
||||||
|
|
||||||
|
|
||||||
@api_bp.errorhandler(ScoException)
|
@api_bp.errorhandler(ScoException)
|
||||||
@api_web_bp.errorhandler(ScoException)
|
@api_web_bp.errorhandler(ScoException)
|
||||||
@api_bp.errorhandler(404)
|
@api_bp.errorhandler(404)
|
||||||
|
@ -21,8 +21,9 @@ import app
|
|||||||
from app import db, log
|
from app import db, log
|
||||||
from app.api import api_bp as bp, api_web_bp
|
from app.api import api_bp as bp, api_web_bp
|
||||||
from app.api import tools
|
from app.api import tools
|
||||||
|
from app.api import api_permission_required as permission_required
|
||||||
from app.but import bulletin_but_court
|
from app.but import bulletin_but_court
|
||||||
from app.decorators import scodoc, permission_required
|
from app.decorators import scodoc
|
||||||
from app.models import (
|
from app.models import (
|
||||||
Admission,
|
Admission,
|
||||||
Departement,
|
Departement,
|
||||||
|
@ -14,7 +14,8 @@ from flask_login import current_user, login_required
|
|||||||
import app
|
import app
|
||||||
from app import log, db
|
from app import log, db
|
||||||
from app.api import api_bp as bp, api_web_bp
|
from app.api import api_bp as bp, api_web_bp
|
||||||
from app.decorators import scodoc, permission_required
|
from app.api import api_permission_required as permission_required
|
||||||
|
from app.decorators import scodoc
|
||||||
from app.models import Evaluation, ModuleImpl, FormSemestre
|
from app.models import Evaluation, ModuleImpl, FormSemestre
|
||||||
from app.scodoc import sco_evaluation_db, sco_saisie_notes
|
from app.scodoc import sco_evaluation_db, sco_saisie_notes
|
||||||
from app.scodoc.sco_exceptions import AccessDenied, ScoValueError
|
from app.scodoc.sco_exceptions import AccessDenied, ScoValueError
|
||||||
|
@ -15,9 +15,10 @@ from flask_login import login_required
|
|||||||
import app
|
import app
|
||||||
from app import db, log
|
from app import db, log
|
||||||
from app.api import api_bp as bp, api_web_bp
|
from app.api import api_bp as bp, api_web_bp
|
||||||
|
from app.api import api_permission_required as permission_required
|
||||||
|
from app.decorators import scodoc
|
||||||
from app.models import APO_CODE_STR_LEN
|
from app.models import APO_CODE_STR_LEN
|
||||||
from app.scodoc.sco_utils import json_error
|
from app.scodoc.sco_utils import json_error
|
||||||
from app.decorators import scodoc, permission_required
|
|
||||||
from app.models import (
|
from app.models import (
|
||||||
ApcNiveau,
|
ApcNiveau,
|
||||||
ApcParcours,
|
ApcParcours,
|
||||||
|
@ -16,7 +16,8 @@ import sqlalchemy as sa
|
|||||||
import app
|
import app
|
||||||
from app import db, log
|
from app import db, log
|
||||||
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR
|
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR
|
||||||
from app.decorators import scodoc, permission_required
|
from app.api import api_permission_required as permission_required
|
||||||
|
from app.decorators import scodoc
|
||||||
from app.scodoc.sco_utils import json_error
|
from app.scodoc.sco_utils import json_error
|
||||||
from app.comp import res_sem
|
from app.comp import res_sem
|
||||||
from app.comp.moy_mod import ModuleImplResults
|
from app.comp.moy_mod import ModuleImplResults
|
||||||
|
@ -17,7 +17,8 @@ from flask_login import current_user, login_required
|
|||||||
import app
|
import app
|
||||||
from app import db, log
|
from app import db, log
|
||||||
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR, tools
|
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR, tools
|
||||||
from app.decorators import scodoc, permission_required
|
from app.api import api_permission_required as permission_required
|
||||||
|
from app.decorators import scodoc
|
||||||
from app.scodoc.sco_exceptions import ScoException
|
from app.scodoc.sco_exceptions import ScoException
|
||||||
from app.but import jury_but_results
|
from app.but import jury_but_results
|
||||||
from app.models import (
|
from app.models import (
|
||||||
|
@ -19,7 +19,8 @@ from app import db, set_sco_dept
|
|||||||
from app.api import api_bp as bp
|
from app.api import api_bp as bp
|
||||||
from app.api import api_web_bp
|
from app.api import api_web_bp
|
||||||
from app.api import get_model_api_object, tools
|
from app.api import get_model_api_object, tools
|
||||||
from app.decorators import permission_required, scodoc
|
from app.api import api_permission_required as permission_required
|
||||||
|
from app.decorators import scodoc
|
||||||
from app.models import Identite, Justificatif, Departement, FormSemestre, Scolog
|
from app.models import Identite, Justificatif, Departement, FormSemestre, Scolog
|
||||||
from app.models.assiduites import (
|
from app.models.assiduites import (
|
||||||
get_formsemestre_from_data,
|
get_formsemestre_from_data,
|
||||||
|
@ -34,11 +34,13 @@ from flask import Response, send_file
|
|||||||
from flask_json import as_json
|
from flask_json import as_json
|
||||||
|
|
||||||
from app.api import api_bp as bp
|
from app.api import api_bp as bp
|
||||||
from app.scodoc.sco_utils import json_error
|
from app.api import api_permission_required as permission_required
|
||||||
|
from app.decorators import scodoc
|
||||||
from app.models import Departement
|
from app.models import Departement
|
||||||
from app.scodoc.sco_logos import list_logos, find_logo
|
from app.scodoc.sco_logos import list_logos, find_logo
|
||||||
from app.decorators import scodoc, permission_required
|
|
||||||
from app.scodoc.sco_permissions import Permission
|
from app.scodoc.sco_permissions import Permission
|
||||||
|
from app.scodoc.sco_utils import json_error
|
||||||
|
|
||||||
|
|
||||||
# Note: l'API logos n'est accessible qu'en mode global (avec jeton, sans dept)
|
# Note: l'API logos n'est accessible qu'en mode global (avec jeton, sans dept)
|
||||||
|
|
||||||
|
@ -13,7 +13,8 @@ from flask_login import login_required
|
|||||||
|
|
||||||
import app
|
import app
|
||||||
from app.api import api_bp as bp, api_web_bp
|
from app.api import api_bp as bp, api_web_bp
|
||||||
from app.decorators import scodoc, permission_required
|
from app.api import api_permission_required as permission_required
|
||||||
|
from app.decorators import scodoc
|
||||||
from app.models import ModuleImpl
|
from app.models import ModuleImpl
|
||||||
from app.scodoc import sco_liste_notes
|
from app.scodoc import sco_liste_notes
|
||||||
from app.scodoc.sco_permissions import Permission
|
from app.scodoc.sco_permissions import Permission
|
||||||
|
@ -18,7 +18,8 @@ from sqlalchemy.exc import IntegrityError
|
|||||||
import app
|
import app
|
||||||
from app import db, log
|
from app import db, log
|
||||||
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR
|
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR
|
||||||
from app.decorators import scodoc, permission_required
|
from app.api import api_permission_required as permission_required
|
||||||
|
from app.decorators import scodoc
|
||||||
from app.scodoc.sco_utils import json_error
|
from app.scodoc.sco_utils import json_error
|
||||||
from app.models import FormSemestre, FormSemestreInscription, Identite
|
from app.models import FormSemestre, FormSemestreInscription, Identite
|
||||||
from app.models import GroupDescr, Partition, Scolog
|
from app.models import GroupDescr, Partition, Scolog
|
||||||
|
@ -14,15 +14,14 @@ from flask_login import current_user, login_required
|
|||||||
|
|
||||||
from app import db, log
|
from app import db, log
|
||||||
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR
|
from app.api import api_bp as bp, api_web_bp, API_CLIENT_ERROR
|
||||||
|
from app.api import api_permission_required as permission_required
|
||||||
from app.auth.models import User, Role, UserRole
|
from app.auth.models import User, Role, UserRole
|
||||||
from app.auth.models import is_valid_password
|
from app.auth.models import is_valid_password
|
||||||
from app.decorators import scodoc, permission_required
|
from app.decorators import scodoc
|
||||||
from app.models import Departement, ScoDocSiteConfig
|
from app.models import Departement
|
||||||
from app.scodoc import sco_edt_cal
|
|
||||||
from app.scodoc.sco_exceptions import ScoValueError
|
from app.scodoc.sco_exceptions import ScoValueError
|
||||||
from app.scodoc.sco_permissions import Permission
|
from app.scodoc.sco_permissions import Permission
|
||||||
from app.scodoc.sco_utils import json_error
|
from app.scodoc.sco_utils import json_error
|
||||||
from app.scodoc import sco_utils as scu
|
|
||||||
|
|
||||||
|
|
||||||
@bp.route("/user/<int:uid>")
|
@bp.route("/user/<int:uid>")
|
||||||
|
@ -84,6 +84,9 @@ def scodoc(func):
|
|||||||
|
|
||||||
|
|
||||||
def permission_required(permission):
|
def permission_required(permission):
|
||||||
|
"""Vérifie les permissions"""
|
||||||
|
|
||||||
|
# Attention: l'API utilise api_permission_required
|
||||||
def decorator(f):
|
def decorator(f):
|
||||||
@wraps(f)
|
@wraps(f)
|
||||||
def decorated_function(*args, **kwargs):
|
def decorated_function(*args, **kwargs):
|
||||||
|
Loading…
Reference in New Issue
Block a user