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

Formulaire de demande de permissions #1062

Open jpm-cbna opened 4 years ago

jpm-cbna commented 4 years ago

Voir le ticket #770 pour le contexte générale de ce ticket. Pour rappel, le cahier des charges / suivi du développement est disponible sur ce lien.

En bref:

Ajout des paramètres de configuration suivant:

[PERMISSION_MANAGEMENT]
    # Activer (=true) l'affichage du lien vers le formulaire de demande 
    # de permissions. Par défaut : désactivé (=false).
    ENABLE_ACCESS_REQUEST = false
    # Lien vers les règles d'accès aux observations sensibles propres à
    # cette instance de GeoNature
    DATA_ACCESS_RULES_LINK = "https://inpn.mnhn.fr/docs/demandes_sinp/Licence_ferme_SINP.pdf"
    # Liste d'id (table `ref_geo.bib_areas_type`, champ `id_type`) des 
    # types de zones géographique sélectionnables dans le filtre par 
    # zones géographiques du formulaire de demande d'accès.
    # Par défaut : Communes (=25) et Départements (=26).
    AREA_TYPES = [25, 26]
    # Durée par défaut en jour pendant laquelle l'accès est autorisé.
    # Le champ "Accès jusqu'au" sera automatiquement rempli avec une date
    # correspondant à nombre de jour dans le futur.
    # Par défaut, ce champ n'apparait pas et l'accès est permanent.
    DEFAULT_ACCESS_DURATION = 90
    # Durée maximum en jour pendant laquelle l'accès peut être autorisé.
    # La date saisie dans le champ "Accès jusqu'au"devra se situé entre 
    # le jour courrant et ce nombre de jours dans le futur.
    # Par défaut, la demande d'accès maximum est de 1 ans.
    MAX_ACCESS_DURATION = 365

    # Activer la validation de la convention suite à une demande d'accès.
    # Par défaut: désactivé (=false).
    ENABLE_CONVENTION = true
    # Titre de la fenêtre modale affichant la convention.
    # Par défaut: "Convention".
    CONVENTION_TITLE = "Convention « Droit d'accès ponctuel aux données géoconfidentielles »"
    # Libellé du bouton permettant d'accepter la convention.
    # Par défaut: "Valider".
    CONVENTION_VALIDATE = "J'accepte les termes de la convention « droit d'accès »."

    # Titre de la section personnalisable du formulaire de demande d'accès
    REQUEST_FORM_TITLE = "Motivations de la demande"
    # Définition de la section personnalisable du formulaire de demande 
    # de permission d'accès.
    [[PERMISSION_MANAGEMENT.REQUEST_FORM]]
        type_widget = "html"
        attribut_name = "motivation-intro"
        html = """
            <small class="form-text">
                Veuillez décrire ci-dessous les motivations à l'origine 
                de votre demande.
            </small>"""
   [[PERMISSION_MANAGEMENT.REQUEST_FORM]]
        type_widget = "textarea"
        attribut_label = "Description"
        attribut_name = "project-description"
        required = false
        help = """Préciser le calendrier, la finalité, l'objet de l’étude 
            scientifique et le cadre réglementaire dans lequel s’inscrit 
            la demande."""
camillemonchicourt commented 4 years ago

Merci pour ces précisions. Y a juste le paramètre SENSITIVE_DATA_ACCESS_RULES_LINK qui me semble assez spécifique comme approche. On n'a pas forcément un lien vers des éléments liés à la sensibilité dans un formulaire de demande d'accès aux données. Ca peut plus général ou sur un autre sujet. Renommer le paramètre de manière plus générique pour un lien vers un document qui peut être sur autre chose que la sensibilité ?

jpm-cbna commented 4 years ago

Le paramètre SENSITIVE_DATA_ACCESS_RULES_LINK permet de rajouter le texte et donc le lien dessus "(Merci de consulter au préalable les règles d’accès aux données sensibles)" à droite de la case à cocher "Je souhaite accéder aux observations sensibles". Si le paramètre n'est pas défini dans le fichier de config alors le texte et le lien n'apparaissent pas. C'est effectivement assez spécifique. Mais ces règles sont présentes à tous les niveaux même au niveau national avec la licence Ferme.

camillemonchicourt commented 4 years ago

OK, j'aurai privilégié un paramètre plus générique pour pouvoir l'utiliser pour une validation des règles de sensibilité, mais aussi d'autres choses plus larges ou différentes. Mais si le message est pré-défini et en dur, alors c'est plus galère en effet.

Si pour commencer, le fonctionnement est spécifique "sensibilité", mais qu'on veut se garder la possibilité d'en élargir ou modifier le sujet plus tard, je propose de garder ce fonctionnement spécifique pour le moment, mais d'au moins renommer le paramètre en DATA_ACCESS_RULES_LINK.

jpm-cbna commented 4 years ago

Si pour commencer, le fonctionnement est spécifique "sensibilité", mais qu'on veut se garder la possibilité d'en élargir ou modifier le sujet plus tard, je propose de garder ce fonctionnement spécifique pour le moment, mais d'au moins renommer le paramètre en DATA_ACCESS_RULES_LINK.

Ok, ça marche.

jpm-cbna commented 4 years ago

Le formulaire de demande d'accès est en cours de finalisation.

L'accès au formulaire via le menu sous le profil de l'utilisateur, le formulaire avec la section standard "Permissions demandées" et la partie personnalisable (optionnelle) ici nommée "Motivations de la demande" : Screenshot_20201014_151503

Le formulaire prêt à être validé avec le nouveau composant "pnx-taxa" utilisé pour le champ "Groupes taxonomiques": Screenshot_20201014_151356

La validation (optionnelle) d'une convention reprenant des éléments de la demande (via un composant de type "custom"): Screenshot_20201014_160555

Zoom sur l'intégration des éléments de la demande: Screenshot_20201014_154703

jpm-cbna commented 4 years ago

Présentation du contenu de la base de données correspondant à des demandes.

Exemple de contenu de la table gn_permissions.t_requests:

id_request|id_role|end_date  |accepted|accepted_date|additional_data                                                                                                                   |meta_create_date   |meta_update_date   |
----------|-------|----------|--------|-------------|----------------------------------------------------------------------------------------------------------------------------------|-------------------|-------------------|
         1|      1|2021-01-11|        |             |{"projectType": "Étude trame verte et bleue", "projectSponsor": "Test", "projectDescription": null}                               |2020-10-13 17:17:14|2020-10-13 17:17:14|
         2|      1|2021-01-11|        |             |{"projectType": "Inventaire scientifique", "projectSponsor": "Test", "projectDescription": null}                                  |2020-10-13 17:34:11|2020-10-13 17:34:11|
         3|      1|2021-01-11|        |             |{"projectType": "Expertise écologique réglementaire", "projectSponsor": "Test", "projectDescription": null}                       |2020-10-13 17:36:53|2020-10-13 17:36:53|
         4|      1|2021-01-11|        |             |{"projectType": "Inventaire scientifique", "projectSponsor": "Test", "projectDescription": null}                                  |2020-10-13 17:37:43|2020-10-13 17:37:43|
         5|      1|          |        |             |{"projectType": "Plan de gestion", "projectSponsor": "COMMANDITAIRE", "projectDescription": "DESCRIPTION"}                        |2020-10-14 14:59:55|2020-10-14 14:59:55|
         6|      1|2021-01-03|        |             |{"projectType": "DOCOB Natura 2000", "projectSponsor": "Un commanditaire.", "projectDescription": "La description de mon projet."}|2020-10-14 15:34:38|2020-10-14 15:34:38|
         7|      1|2021-01-12|        |             |{"projectType": "Plan de gestion", "projectSponsor": "Commanditaire", "projectDescription": null}                                 |2020-10-14 16:13:08|2020-10-14 16:13:08|
         8|      1|2021-01-12|        |             |{"projectType": "Étude trame verte et bleue", "projectSponsor": "Test", "projectDescription": null}                               |2020-10-14 16:13:47|2020-10-14 16:13:47|

Exemple de permissions liées aux demandes (table gn_permissions.cor_requests_permissions) (affichage des codes à la place des id pour mieux comprendre):

id_request_permission|id_request|id_module|id_action|id_object            |id_filter_type|value_filter         |
---------------------|----------|---------|---------|---------------------|--------------|---------------------|
                    1|         1| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt            |
                    2|         1| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abreschviller        |
                    3|         1| SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus              |
                    4|         1| SYNTHESE|        R|  PRIVATE_OBSERVATION|   SENSITIVITY|true                 |
                    5|         2| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Saint-Laurent-du-Cros|
                    6|         2| SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Juniperus            |
                    7|         2| SYNTHESE|        R|  PRIVATE_OBSERVATION|   SENSITIVITY|true                 |
                    8|         3| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abbévillers          |
                    9|         3| SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus              |
                   10|         3| SYNTHESE|        R|SENSITIVE_OBSERVATION|   SENSITIVITY|true                 |
                   11|         4| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt            |
                   12|         4| SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Papyridea            |
                   13|         4| SYNTHESE|        R|SENSITIVE_OBSERVATION|   SENSITIVITY|true                 |
                   14|         5| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abaucourt            |
                   15|         6| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt            |
                   16|         6| SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Aceria               |
                   17|         6| SYNTHESE|        R|SENSITIVE_OBSERVATION|   SENSITIVITY|true                 |
                   18|         7| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abainville           |
                   19|         8| SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt            |

Requête permettant d'afficher le tableau précédent:

SELECT 
    id_request_permission, 
    id_request, 
    tm.module_code AS id_module, 
    ta.code_action AS id_action,
    tob.code_object AS id_object,
    bft.code_filter_type AS id_filter_type,
    CASE bft.code_filter_type
        WHEN 'GEOGRAPHIC' THEN (SELECT area_name FROM ref_geo.l_areas la WHERE la.id_area = crp.value_filter::INTEGER)
        WHEN 'TAXONOMIC' THEN (SELECT lb_nom FROM taxonomie.taxref t WHERE t.cd_nom = crp.value_filter::INTEGER)
        ELSE value_filter
    END AS value_filter
FROM gn_permissions.cor_requests_permissions crp 
    JOIN gn_commons.t_modules tm ON (crp.id_module = tm.id_module)
    JOIN gn_permissions.t_actions ta  ON (crp.id_action = ta.id_action)
    JOIN gn_permissions.t_objects tob ON (crp.id_object = tob.id_object)
    JOIN gn_permissions.bib_filters_type bft ON (crp.id_filter_type = bft.id_filter_type)
ORDER BY id_request_permission ;

Une question concernant, par exemple, la dernière demande d'accès id_request=8, elle est sensée donner l'accès à la géolocalisation précise des observations privées (=PRIVATE_OBSERVATION) sur la commune Abancourt pour tout les taxons. Actuellement, je ne stocke pas d'entrée pour le filtre de type TAXONOMIC. Mais si je parts de ton principe @TheoLechemia, il faudrait que stocke aussi une entrée pour le filtre TAXONOMIC avec la valeur du filtre (=value_filter) valant ALL par exemple. Ou alors dans ce cas là, j'indique le cd_nom (349 525) correspondant à "Biota", c'est à dire le taxon mère dans TaxRef. Est ce que vous avez des préférences pour l'une ou l'autre de ces solutions ? Vous avez d'autres idées ?

jpm-cbna commented 4 years ago

Rappel du fonctionnement actuel des permissions

Les modules concernés par les permissions d'accès aux données géo-confidentielles sont : Synthese et Validation. Le module Export n'est pas concerné car les vues sont crées par l'administrateur.

Les actions concernées sont pour Synthese R+E (= Lecture + Export), pour Validation R+V (= Lecture + Validation).

Le seul objet existant par défaut pour ces 2 modules est ALL que l'on peut considérer comme correspondant aux observations présentes dans la table gn_synthese.synthese.

Les filtres actuels qui peuvent s'appliquer sur l'objet ALL pour les modules et actions indiquées ci-dessus sont :

Fonctionnement par défaut de ces modules vis à vis des permissions:

Les permissions héritées de GeoNature pour les 2 modules qui nous concernent et le groupe par défaut Grp_en_poste sont les suivantes:

Cela signifie que par défaut un utilisateur qui vient juste de s'inscrire à GeoNature aura seulement accès aux données sensibles et privées de son organisme ou lui appartenant. L'utilisateur lorsqu'il s'inscrit via le formulaire d'inscription n'étant par défaut associé à aucun organisme, il n'aura bien aucune possibilité pour visualiser/exporter les observations privées ou sensibles dans le module Synthese, ni les visualiser/valider dans le module Validation (le filtre portée ayant une valeur indiquant "aucune observation" pour ce dernier module).

Points à acter/préciser

L'objet principal correspond à ALL et concerne toutes les observations présentes dans la table gn_synthese.synthese. Nous pourrions distinguer 3 sous-type d'observation:

Le filtre SENSITIVITY devrait être renommé pour indiquer plutôt le type de précision à utiliser. Les valeurs du filtre pourraient aussi être remplacé par un booléen. Ces modifications permettraient de le réutiliser pour les observations privées qui sont aussi concernées par la notion de géo-confidentialité. Il ne s'applique donc qu'aux objets de types observations privées et observations sensibles. Propositions de nouveau nom de type et de nouvelles valeurs:

Si l'utilisateur n'a aucune permission indiquant une valeur pour le filtre "SENSITIVITY" PRECISION devons nous afficher ou pas les observations privées et sensible de manière précises ? Il me semble que le comportement des modules étant de ne rien afficher en l'absence de permission, nous devrions afficher ces données de manière floutée dans ce cas là. Cela va dans le sens des recommandations du SINP.

Si le comportement par défaut des modules est de flouter les observations privées et sensible, la valeur du filtre SENSITIVITY indiquant un floutage (= true ou fuzzy) peut sembler inutile. Toutefois, elle pourrait être utilisé pour forcer à nouveau le floutage d'un sous-ensemble d'observations préalablement rendues précises par une permission plus large. Elle est donc bien nécessaire.

Exemples de permissions demandées

Voici des exemples de contenu de la table cor_requests_permissions en fonction de différents types de demande d'accès (cf. formulaire de demande) si nous appliquons les modifications précédentes. Dans les tableaux ci-dessous, les identifiant sont remplacés par les codes correspondants afin de faciliter la compréhension.

Accès aux observations privées précises pour tous les groupes taxonomiques limité par zones géographiques:

id_request_permission|id_request|id_module  |id_action|id_object            |id_filter_type|value_filter            |
---------------------|----------|-----------|---------|---------------------|--------------|------------------------|
                    1|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    2|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    3|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    4|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    5|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    6|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    7|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    8|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |

Accès aux observations privées précises limité à certains groupes taxonomiques sur certaines zones géographiques:

id_request_permission|id_request|id_module  |id_action|id_object            |id_filter_type|value_filter            |
---------------------|----------|-----------|---------|---------------------|--------------|------------------------|
                    1|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    2|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    3|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                    4|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    5|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    6|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                    7|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    8|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    9|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   10|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                   11|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   12|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |

Accès aux observations privées et sensibles précises pour tous les groupes taxonomiques limité par zones géographiques:

id_request_permission|id_request|id_module  |id_action|id_object            |id_filter_type|value_filter            |
---------------------|----------|-----------|---------|---------------------|--------------|------------------------|
                    1|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    2|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    3|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    4|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    5|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    6|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    7|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    8|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    9|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   10|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   11|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   12|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   13|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   14|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   15|         1| VALIDATION|        V|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   16|         1| VALIDATION|        V|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |

Accès aux observations privées et sensibles précises limité à certains groupes taxonomiques sur certaines zones géographiques:

id_request_permission|id_request|id_module  |id_action|id_object            |id_filter_type|value_filter            |
---------------------|----------|-----------|---------|---------------------|--------------|------------------------|
                    1|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    2|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    3|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                    4|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    5|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    6|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                    7|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    8|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    9|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   10|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                   11|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   12|         1| VALIDATION|        V|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   13|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   14|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   15|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   16|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   17|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   18|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   19|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   20|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   21|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   22|         1| VALIDATION|        V|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   23|         1| VALIDATION|        V|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   24|         1| VALIDATION|        V|SENSITIVE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
jpm-cbna commented 4 years ago

Après réflexion, je ne suis pas certain qu'une demande de permission doive donner des permissions par défaut pour le module "Validation". À la limite, une demande pourrait donner des permissions pour l'action "Lire (R)" mais pas pour "Valider (V)". Qu'en pensez vous ?

Cela donnerait les permissions suivantes:

Accès aux observations privées précises limité à certains groupes taxonomiques sur certaines zones géographiques:

id_request_permission|id_request|id_module  |id_action|id_object            |id_filter_type|value_filter            |
---------------------|----------|-----------|---------|---------------------|--------------|------------------------|
                    1|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    2|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    3|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                    4|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    5|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    6|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                    7|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    8|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    9|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |

Accès aux observations privées et sensibles précises pour tous les groupes taxonomiques limité par zones géographiques:

id_request_permission|id_request|id_module  |id_action|id_object            |id_filter_type|value_filter            |
---------------------|----------|-----------|---------|---------------------|--------------|------------------------|
                    1|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    2|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    3|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    4|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    5|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    6|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    7|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                    8|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    9|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   10|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   11|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   12|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |

Accès aux observations privées et sensibles précises limité à certains groupes taxonomiques sur certaines zones géographiques:

id_request_permission|id_request|id_module  |id_action|id_object            |id_filter_type|value_filter            |
---------------------|----------|-----------|---------|---------------------|--------------|------------------------|
                    1|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    2|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    3|         1|   SYNTHESE|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                    4|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    5|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    6|         1|   SYNTHESE|        E|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                    7|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     PRECISION|exact                 |
                    8|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                    9|         1| VALIDATION|        R|  PRIVATE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   10|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   11|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   12|         1|   SYNTHESE|        R|SENSITIVE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   13|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   14|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   15|         1|   SYNTHESE|        E|SENSITIVE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
                   16|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|     PRECISION|exact                 |
                   17|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|    GEOGRAPHIC|Abancourt,Abreschviller |
                   18|         1| VALIDATION|        R|SENSITIVE_OBSERVATION|     TAXONOMIC|Quercus,Juniperus       |
jpm-cbna commented 3 years ago

Au final, une première version a été implémentée avec l'utilisation de 2 objets (PRIVATE_OBSERVATION et SENSITIVE_OBSERVATION) et d'un filtre PRECISION possédant 2 valeurs "fuzzy" et "exact".

Ces notions permettent de gérer le floutage ou l'affichage précis des observations du module Synthèse en fonction de :

Le floutage des observations affichées et exportées via la Synthèse est réalisé au niveau de l'API Python. Il vient s'intercaler dans le web service renvoyant le geojson à la Synthèse après la requête des observations filtrées et avant de renvoyer le geojson. Si activé, il se charge de rechercher pour chaque observation renvoyée par la requête de filtrage l'entité géographique de floutage correspondant au niveau de diffusion (priorité 1) ou de sensibilité (priorité 2) à l'aide d'une requête UNION. Dans le fichier de config de GeoNature, nous avons les paramètres suivant qui établissent la correspondance entre les niveaux de floutage et le type de zone géographique à utiliser :

[DATA_BLURRING]
    # Activer (=true) l'affichage du floutage des données.
    ENABLE_DATA_BLURRING = true
    # Correspondance entre les niveau de diffusion (nomenclaure NIV_PRECIS) 
    # et un type de zone géographique utilisée pour le rendu sur les cartes.
    AREA_TYPE_FOR_DIFFUSION_LEVELS = [
            {level = "0", area = "M5"},# Standard
            {level = "1", area = "M5"},# Commune
            {level = "2", area = "M5"},# Maille
            {level = "3", area = "M10"},# Département
        ]
    # Correspondance entre les niveau de sensibilité (nomenclaure SENSIBILITE) 
    # et un type de zone géographique utilisée pour le rendu sur les cartes.
    AREA_TYPE_FOR_SENSITIVITY_LEVELS = [
            {level = "1", area = "M5"},# Commune
            {level = "2", area = "M5"},# Maille
            {level = "3", area = "M10"},# Département
        ]

La présence de permissions autorisant l'affichage précis des données privées ou sensibles va tout simplement retirée (anti-join) pour chaque partie (niveau de diffusion et sensibilité) de la requête de floutage les observations correspondants aux filtres des permissions de l'utilisateur.

Tout ceci est actuellement fonctionnel et mis en production sur les SINP PACA et AURA.

camillemonchicourt commented 3 years ago

OK c'est un sujet dense et complexe, et je n'ai pas tout en tête.

Mais j'avais souvenir que pour le calcul du floutage, on ne s'appuierait que sur le champs diffusion_level, lui-même s'appuyant sur la valeur de sensibilité éventuellement surcouché.

Sinon je me demande pourquoi il est utile de paramétrer les correspondances des niveaux de diffusion avec des types de zonages, car j'avais en tête que c'était défini au niveau des nomenclatures du SINP des différents niveaux de diffusion ?

jpm-cbna commented 3 years ago

Non, les champs "diffusion_level" et "sensibilité" sont bien 2 valeurs distinctes. Une personne qui a accès aux données privées n'a pas forcément accès aux données sensibles. Du coup, il faut bien gérer séparément ces deux notions. Il y a d'ailleurs des permissions pour gérer ces 2 types d'information. Cependant rien n’empêche d'ajouter un trigger qui peut se charger d'adapter le niveau de diffusion en fonction du niveau de sensibilité...

La correspondance entre niveau de diffusion ou sensibilité et les zonages a été proposée par @amandine-sahl . C'est une fonctionnalité vraiment intéressante pour :