Code source de geonature.core.gn_permissions.routes

"""
Routes of the gn_permissions blueprint
"""

from copy import copy

from flask import Blueprint, Response, session
from geonature.core.gn_commons.models.base import TModules
import sqlalchemy as sa

from geonature.utils.env import db
from sqlalchemy.exc import NoResultFound
from sqlalchemy.orm import joinedload
from geonature.core.gn_permissions.models import PermAction, PermissionAvailable, TObjects
from geonature.core.gn_permissions.schemas import PermissionAvailableSchema
from geonature.core.gn_permissions.decorators import login_required
from geonature.core.gn_permissions.commands import supergrant
from werkzeug.exceptions import NotFound


[docs] routes = Blueprint( "gn_permissions", __name__, cli_group="permissions", template_folder="./templates" )
routes.cli.add_command(supergrant) # @TODO delete @routes.route("/logout_cruved", methods=["GET"])
[docs] def logout(): """ Route to logout with cruved .. :quickref: Permissions; To avoid multiples server call, we store the cruved in the session when the user logout we need clear the session to get the new cruved session """ copy_session_key = copy(session) for key in copy_session_key: session.pop(key) return Response("Logout", 200)
@routes.route("/availables", methods=["GET"]) @login_required
[docs] def list_permissions_availables(): pa = db.session.execute(sa.select(PermissionAvailable)).scalars() schema = PermissionAvailableSchema(only=["action", "module", "object"]) return schema.dump(pa, many=True)
@routes.route("/availables/<module_code>/<code_object>/<code_action>", methods=["GET"]) @login_required
[docs] def get_permission_available(module_code, code_object, code_action): try: pa = db.session.execute( sa.select(PermissionAvailable).where( PermissionAvailable.module.has(TModules.module_code == module_code), PermissionAvailable.object.has(TObjects.code_object == code_object), PermissionAvailable.action.has(PermAction.code_action == code_action), ) ).scalar_one() except NoResultFound: raise NotFound schema = PermissionAvailableSchema(only=["action", "module", "object"]) return schema.dump(pa)