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

Gestion des zones de compétences des organisations #571

Merged

Conversation

jusabatier
Copy link
Collaborator

Ce patch permet tout en conservant la possibilité de garder l'ancien fonctionnement de si besoin aller chercher les codes INSEE paramétrés pour l'organisation dans Georchestra.

Voici une description des modifications fonctionnelles :

  • Comparaison des headers sec-org et sec-roles au idgroup de groupe_autorisation
  • Si activation de la gestion des orgs LDAP, alors :
    • création d'une vue materialisée org_autorisation contenant les organisations et leurs codes INSEE autorisés remontées depuis le LDAP Georchestra
    • création d'une table role_autorisation permettant d'associer des permissions à des roles
    • groupe_autorisation devient une vue rassemblant les permissions contenues dans org_autorisation et role_autorisation
  • Sinon on reste comme avant avec une table groupe_autorisation à remplir manuellement

L'utilisation d'une vue matérialisée pour org_autorisation permet de ne pas surcharger le LDAP.

Copy link
Member

@pierrejego pierrejego left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Il faut encore que je teste la branche

database/sql/ldap/cronjob.sql Outdated Show resolved Hide resolved

Dans Debian 10, multicorn est disponible via un paquet :

`$ sudo apt install postgresql-11-python3-multicorn`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A ajouter dans le playbook ansible

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

y'a t'il vraiment des gens qui utilisent le déploiement d'un deb de cadastrapp via ansible ? j'en doute très fortement :)

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Même si cette fonctionnalité est optionnelle car dépendante d'un LDAP ?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

C'était juste une note pour moi :)

@jusabatier
Copy link
Collaborator Author

Du coup on en est où sur cette PR ?

@pierrejego
Copy link
Member

:) je suis dessus ce matin, j'étais en train de la tester justement

@landryb
Copy link
Member

landryb commented Aug 18, 2021

Je ne suis pas un méga fan du merge des 2 notions de roles et orgs dans la meme table (meme si c'est elegant de taper sur le ldap depuis postgresql), je ne l'utiliserais probablement pas vu que j'ai l'équivalent en local.

par contre j'ai regardé les changements de code et on retrouve plus ou moins la logique que j'avais ajouté dans landryb@f46f8d4, je pense juste qu'il manque la partie logback.xml de landryb@722d9b82#diff-c490bf691e6012c211187394c8b97677b05b61b7a2d4079130437338c50c72d8 pour logger le header sec-org correctement.

Copy link
Member

@landryb landryb left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ce que je voulais dire c'est qu'il n'y avait pas besoin des deux warnings :)

@landryb
Copy link
Member

landryb commented Aug 18, 2021

testing the branch with a regular groupe_autorisation table fails when preparing the sql statement doing the filtering:

Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select distinct cgocommune, ccodep from cadastrapp.groupe_autorisation  WHERE idgroup IN (?,?,?,?,?,?,?,?,?,?) ;]; nested exception is org.postgresql.util.PSQLException: Impossible de déduire le type SQL à utiliser pour une instance de java.util.ArrayList. Utilisez setObject() avec une valeur de type explicite pour spécifier le type à utiliser.
        at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:99)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:654)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:688)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:720)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:730)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:780)
        at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:857)
        at org.georchestra.cadastrapp.service.CadController.addAuthorizationFiltering(CadController.java:190)

afaict this is when passing an ArrayList instead of a plain String[] here: https://github.com/georchestra/cadastrapp/pull/571/files#diff-f613eeb3e3ebe2186b60f5320ce1de72adeebeef7dbca9c058ad0b7c98bcee7dR189

which doesnt seem to work at runtime with java8.

@landryb
Copy link
Member

landryb commented Aug 18, 2021

testing the branch with a regular groupe_autorisation table fails when preparing the sql statement doing the filtering:

Caused by: org.springframework.jdbc.BadSqlGrammarException: PreparedStatementCallback; bad SQL grammar [select distinct cgocommune, ccodep from cadastrapp.groupe_autorisation  WHERE idgroup IN (?,?,?,?,?,?,?,?,?,?) ;]; nested exception is org.postgresql.util.PSQLException: Impossible de déduire le type SQL à utiliser pour une instance de java.util.ArrayList. Utilisez setObject() avec une valeur de type explicite pour spécifier le type à utiliser.
        at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:99)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
        at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:82)
        at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:654)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:688)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:720)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:730)
        at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:780)
        at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:857)
        at org.georchestra.cadastrapp.service.CadController.addAuthorizationFiltering(CadController.java:190)

afaict this is when passing an ArrayList instead of a plain String[] here: https://github.com/georchestra/cadastrapp/pull/571/files#diff-f613eeb3e3ebe2186b60f5320ce1de72adeebeef7dbca9c058ad0b7c98bcee7dR189

which doesnt seem to work at runtime with java8.

with this:

-                       limitations = jdbcTemplate.queryForList(queryBuilder.toString(), groupsList);
+                       limitations = jdbcTemplate.queryForList(queryBuilder.toString(), groupsList.toArray(new String[groupsList.size()]));

it seems to work at runtime with java8, i have proper filtering. Will check all cases..

@jusabatier
Copy link
Collaborator Author

Correction done, it seems to work also in JAVA11. Thanks for report.

@landryb
Copy link
Member

landryb commented Aug 18, 2021

@pierrejego @MaelREBOUX pour moi c'est ok pour merger.

@MaelREBOUX
Copy link
Member

création d'une vue materialisée org_autorisation contenant les organisations et leurs codes INSEE autorisés remontées depuis le LDAP Georchestra

Hu : et si on gère pas ça comme ça, que se passe-t-il ?

Tu confirmes @jusabatier que ce que tu proposes est optionnel et qu'on peut rester comme avant ?

@jusabatier
Copy link
Collaborator Author

Oui, c'est optionnel et applicable via une option dans la config du script de chargement de la BDD cadastre.

https://github.com/georchestra/cadastrapp/pull/571/files#diff-5ee5fec02eb586946e62a42ff7937c05e0c45353ae7856d34d7c45f86a1649e0R28

@MaelREBOUX MaelREBOUX self-requested a review August 23, 2021 10:25
@landryb
Copy link
Member

landryb commented Aug 24, 2021

déployé en production chez nous, marche ok.

@pierrejego pierrejego self-assigned this Sep 14, 2021
@pierrejego pierrejego added this to the v 1.10 milestone Sep 14, 2021
@pierrejego
Copy link
Member

Hello, merci @jusabatier, @landryb et @MaelREBOUX pour ce développement et cette nouvelle fonctionnalité.

De mon côté je n'ai pas pu tester avec unicorn, ma plateforme est encore en debian 9 avec postgresql 9.6 et un apt install postgresql-9.6-python-multicorn m'indique qu'il faut installer tout grass720.

Tester en mode uniquement en mode orgsAutorisations=False

De pas de cron disponible en 9.6 pour postgresql -> postgresql-9.6-cron. Je n'ai donc pas pu tester la partie cron.

Non tester en déploiement Docker non plus.

Une nouvelle machine arrive je referais des tests, à terme d'ailleurs ça serait pas mal de mettre tout ça sur les machines de georchestra

@MaelREBOUX tester avec le fonctionnement de Rennes Métropole pour moi c'est bon aussi.

Merci encore pour ce développement !

@pierrejego
Copy link
Member

Dasn les checks, soucis de récupération de lib sur l'artifactory georchestra. Mais ça build ici, et surtout je vais dans la foulée changer les versions liées à l'issue #554 qui devrait résoudre ce problème de build en même temps.
Je merge donc

@pierrejego pierrejego merged commit 8dca1bd into georchestra:master Sep 14, 2021
@MaelREBOUX
Copy link
Member

@pierrejego j'ai rien fait moi. Donc je note une inquiétude sur la mise en route chez nous. Ce serait bien que @pmauduit soit au courant car je comprend que les composants changent si on utilise cette fonction.

J'espère que c'est optionnel et pas obligatoire même si on s'en sert pas.

@pierrejego
Copy link
Member

oui c'est bien optionnel

@MaelREBOUX
Copy link
Member

optionnel en fonctionnement oui mais faut-il installer la lib postgresql-9.6-python-multicorn obligatoirement ?

@landryb
Copy link
Member

landryb commented Sep 20, 2021

non c'est uniquement si tu veux utiliser la maj periodique automatique de la table depuis le ldap.

@MaelREBOUX
Copy link
Member

Note : penser à mettre à jour les prérequis qq part

@jusabatier
Copy link
Collaborator Author

@MaelREBOUX C'est déjà mis à jour dans la doc du dépôt via la PR

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

Successfully merging this pull request may close these issues.

4 participants