Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Occhab] Erreur serveur lors de la consultation d'une station #2909

Closed
Vottana opened this issue Feb 13, 2024 · 5 comments
Closed

[Occhab] Erreur serveur lors de la consultation d'une station #2909

Vottana opened this issue Feb 13, 2024 · 5 comments
Assignees
Milestone

Comments

@Vottana
Copy link

Vottana commented Feb 13, 2024

GN 2.12.3
Debian 11

Bonjour à tous,

La consultation et l'édition des habitats me renvoie une erreur interne, lorsque je clique sur ces icônes dans la liste des relevés habitats :
image

Internal Server Error
The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
Requête : 14e45b74-cca3-43d1-88f3-6ddf03fef084

Pour l'édition, le profil utilisé n'a pas le droit d'édition sur une station autre que les siennes, mais sur Occtax, j'ai un petit sens interdit sur la souris qui empêche de cliquer sur l'icône d'édition. Ce serait mieux d'avoir cet icône au lieu d'un message d'Erreur interne.

Pour la consultation (l'icône i), le profil a normalement le droit de consultation. Ça fonctionne bien sur Occtax.
J'ai l'impression que c'est un problème dans les droits, mais ce sont les mêmes pour Occtax et OccHab. Les droits sont attribués a un groupe et le compte utilisé fait bien parti du groupe. Le CRUVED est le même pour Occtax et Occhab.

Voici le log :

[2024-02-13 11:30:55 +0100] [3156873] [ERROR] Exception on /occhab/stations/1/ [GET]
Traceback (most recent call last):
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 1820, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 1796, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/geonatureadmin/geonature/backend/geonature/core/gn_permissions/decorators.py", line 56, in decorated_view
    return view_func(*args, **kwargs)
  File "/home/geonatureadmin/geonature/contrib/gn_module_occhab/backend/gn_module_occhab/blueprint.py", line 133, in get_station
    return geojsonify(station_schema.dump(station))
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 557, in dump
    result = self._serialize(processed_obj, many=many)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/schema.py", line 525, in _serialize
    value = field_obj.serialize(attr_name, obj, accessor=self.get_attribute)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/fields.py", line 342, in serialize
    return self._serialize(value, attr, obj, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/marshmallow/fields.py", line 1911, in _serialize
    return self._serialize_method(obj)
  File "/home/geonatureadmin/geonature/backend/geonature/utils/schema.py", line 22, in get_cruved
    return {action: obj.has_instance_permission(scope) for action, scope in scopes.items()}
  File "/home/geonatureadmin/geonature/backend/geonature/utils/schema.py", line 22, in <dictcomp>
    return {action: obj.has_instance_permission(scope) for action, scope in scopes.items()}
  File "/home/geonatureadmin/geonature/contrib/gn_module_occhab/backend/gn_module_occhab/models.py", line 141, in has_instance_permission
    return g.current_user in self.observers or self.dataset.has_instance_permission(scope)
  File "/home/geonatureadmin/geonature/backend/geonature/core/gn_meta/models.py", line 529, in has_instance_permission
    if g.current_user.id_role == self.id_digitizer or g.current_user in self.user_actors:
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/ext/hybrid.py", line 900, in __get__
    return self.fget(instance)
  File "/home/geonatureadmin/geonature/backend/geonature/core/gn_meta/models.py", line 513, in user_actors
    return [actor.role for actor in self.cor_dataset_actor if actor.role is not None]
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/orm/attributes.py", line 294, in __get__
    return self.impl.get(instance_state(instance), dict_)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/orm/attributes.py", line 728, in get
    value = callable_(state, passive)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/orm/strategies.py", line 969, in __call__
    return strategy._load_for_state(state, passive)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/orm/strategies.py", line 710, in _load_for_state
    self._invoke_raise_load(state, passive, "raise")
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/sqlalchemy/orm/strategies.py", line 671, in _invoke_raise_load
    raise sa_exc.InvalidRequestError(
sqlalchemy.exc.InvalidRequestError: 'TDatasets.cor_dataset_actor' is not available due to lazy='raise'

Est-ce qu'il y a un truc que je dois paramétrer dans le CRUVED ? Je ne comprends pas trop avec le log la manip a faire pour résoudre ce problème.
Merci d'avance pour vos retours et bonne journée !
Vottana

@camillemonchicourt
Copy link
Member

Peux-tu préciser les permissions dont dispose cet utilisateur sur le module Occhab ?

Je viens de tester sur le serveur de DEMO (https://demo.geonature.fr/geonature/#/occhab) avec l'utilisateur admin / admin qui a tous les droits. Pas de soucis.

J'ai ensuite testé avec un utilisateur qui ne peut que LIRE dans le module Occhab, et là je peux cliquer sur les boutons MODIFIER et SUPPRIMER de toutes les stations = Pas normal. Par contre si j'essaie de valider une modification d'une station, j'ai un message qui m'indique que je n'ai pas les permissions. Idem si j'essaie de supprimer une station.

Maintenant si j'ajoute un permission U de modification sur le module Occhab à cet utilisateur, mais en la limitant à MES DONNEES uniquement, alors là j'ai bien le soucis que tu remontes que ce soit pour afficher le détail ou modifier une station :

image

@Vottana
Copy link
Author

Vottana commented Feb 14, 2024

Bonjour Camille,

Avec le compte Admin, tout fonctionne.
J'ai le souci avec un compte Utilisateur du groupe "en poste", le groupe pour les salariés de l'organisme. Le CRUVED est le suivant:
C = 3
R = 3
U = 1
V = 0
E = 3
D = 1

@camillemonchicourt
Copy link
Member

OK ça confirme le soucis que j'ai reproduis.
On va regarder ça.

@jacquesfize
Copy link
Contributor

jacquesfize commented Feb 15, 2024

Bonjour @Vottana,

En effet, je reproduis aussi le bug ! Nous venons de faire un fix sur la PR #2915 qui sera intégré dans le 2.14.

@camillemonchicourt
Copy link
Member

Ce soucis a été corrigé dans la 2.14.0.

Cependant, en faisant des tests, nous avons identifié d'autres soucis : les boutons d'édition ou suppression de stations ne sont pas désactivés même si on n'a pas les permissions sur certaines stations. Heureusement dans ce cas la modification ou la suppression ne sont pas effectifs.
A corriger par ailleurs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants