PnX-SI / GeoNature

Application de saisie et de synthèse des observations faune et flore
GNU General Public License v3.0
104 stars 102 forks source link

Pas d'accès à la page permission/permissions #2759

Open RNF-SI opened 1 year ago

RNF-SI commented 1 year ago

Bonjour, J'ai un problème probablement lié à ma configuration spéciale. Mon schéma des utilisateurs est un foreign_schema d'une autre base GeoNature. Lors de chaque mise à jour, je remet en place le schéma utilisateurs de base pour ne pas rencontrer de problème (que je renomme utilisateurs_old le reste du temps).

Mon problème c'est une erreur 500 sur la page /api/admin/permissions/permission/ Avec le message suivant dans les logs :

[2023-10-19 14:51:53 +0200] [1106159] [ERROR] Exception on /admin/permissions/permission/ [GET]
Traceback (most recent call last):
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 2529, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 1825, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_cors/extension.py", line 176, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 1676, in handle_user_exception
    return self.ensure_sync(handler)(e)
  File "/home/geonatureadmin/geonature/backend/geonature/core/errors.py", line 99, in handle_exception
    raise e
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 1823, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/app.py", line 1799, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/base.py", line 69, in inner
    return self._run_view(f, *args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/base.py", line 369, in _run_view
    return fn(self, *args, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/model/base.py", line 2029, in index_view
    return self.render(
  File "/home/geonatureadmin/geonature/backend/geonature/core/gn_permissions/admin.py", line 416, in render
    return super().render(template, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/base.py", line 308, in render
    return render_template(template, **kwargs)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/templating.py", line 147, in render_template
    return _render(app, template, context)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask/templating.py", line 130, in _render
    rv = template.render(context)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/jinja2/environment.py", line 1301, in render
    self.environment.handle_exception()
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/jinja2/environment.py", line 936, in handle_exception
    raise rewrite_traceback_stack(source=source)
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/templates/bootstrap4/admin/model/list.html", line 6, in top-level template code
    {% import 'admin/model/row_actions.html' as row_actions with context %}
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/templates/bootstrap4/admin/master.html", line 1, in top-level template code
    {% extends admin_base_template %}
  File "/home/geonatureadmin/geonature/backend/geonature/templates/layout.html", line 4, in top-level template code
    {% extends 'admin/base.html' %}
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/templates/bootstrap4/admin/base.html", line 39, in top-level template code
    {% block page_body %}
  File "/home/geonatureadmin/geonature/backend/geonature/templates/layout.html", line 85, in block 'page_body'
    {% block body %}
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/templates/bootstrap4/admin/model/list.html", line 68, in block 'body'
    {% block model_list_table %}
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/templates/bootstrap4/admin/model/list.html", line 116, in block 'model_list_table'
    {% block list_row scoped %}
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/templates/bootstrap4/admin/model/list.html", line 146, in block 'list_row'
    {{ get_value(row, c) }}
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/model/base.py", line 1877, in get_list_value
    return self._get_list_value(
  File "/home/geonatureadmin/geonature/backend/venv/lib/python3.9/site-packages/flask_admin/model/base.py", line 1836, in _get_list_value
    value = column_fmt(self, context, model, name)
  File "/home/geonatureadmin/geonature/backend/geonature/core/gn_permissions/admin.py", line 107, in role_formatter
    if role.groupe:
AttributeError: 'NoneType' object has no attribute 'groupe'

Je n'arrive pas bien à voir ce qui change ici. Des données auto-générées par le changement de système de permissions peut être ? et qui se seraient donc basées sur le mauvais schéma utilisateurs.

D'autre part, et je ne sais pas si c'est lié, l'ensemble des données de mon GeoNature sont visible par tous les utilisateurs dans Dashboard où dans les chiffres clés de la page d'accueil.

camillemonchicourt commented 1 year ago

Quelle version de GeoNature ?

Les évolutions des permissions n'ont pas changé du tout la structure des données du schéma utilisateurs géré niveau UsersHub.

C'est uniquement le schéma gn_permissions de GeoNature qui a évolué dans la 2.13.

Dans le module Dashboard, il n'y a pas de permissions, soit y accède soit y n'y accède pas.

jbrieuclp commented 1 year ago

Le champ "groupe" est bien présent dans ta table récupérée ?

RNF-SI commented 1 year ago

Oui le champ groupe est bien présent. Le foreign schema vient d'un GeoNature également en 2.13.2.

Pour le module Dashboard, on voit donc forcément les infos sur les données de l'ensemble des utilisateurs, pas que ceux de son organisme ?

Les évolutions de gn_permissions n'ont t'elles pas conduit à une complétion de la table à l'installation à partir de données du schéma utilisateur ? auquel cas ça serait le mauvais schéma utilisateur pour ma part

camillemonchicourt commented 1 year ago

Oui le module Dashboard n'a jamais eu de permissions implémentées et ce n'est pas prévu. Avec les permissions bien à plat et détaillées de la 2.13, c'est en effet bien plus clair et lisible.

Pour les évolutions de gn_permissions, elles sont discutées ici (https://github.com/PnX-SI/GeoNature/issues/2472#issuecomment-1507207635) et faites ici si je ne me trompe pas :