CiviCRM Community Forums (archive)

*

News:

Have a question about CiviCRM?
Get it answered quickly at the new
CiviCRM Stack Exchange Q+A site

This forum was archived on 25 November 2017. Learn more.
How to get involved.
What to do if you think you've found a bug.



  • CiviCRM Community Forums (archive) »
  • Language and Locality »
  • Francophone User Group (Moderators: mathieu, xavier) »
  • ACLs pour limiter l'accès à un smart group
Pages: [1]

Author Topic: ACLs pour limiter l'accès à un smart group  (Read 667 times)

flo81

  • I’m new here
  • *
  • Posts: 21
  • Karma: 1
  • CiviCRM version: 4.5.8
  • CMS version: Drupal 7.34
  • MySQL version: 5.5.40
  • PHP version: 5.4
ACLs pour limiter l'accès à un smart group
March 10, 2015, 08:34:03 am
Bonjour,

Je cherche à configurer un jeu d'ACL permettant à des utilisateurs d'administrer uniquement les contacts d'un smart group, avec Drupal 7.34 et CiviCRM 4.5.8. Ce que j'ai fait :

- Créer un rôle Drupal et lui donner des droits restreints sur Civi (notamment, pas "Voir tous les contacts" et "Modifier tous les contacts")
- Créer un utilisateur Drupal / Civi, lui donner ce rôle
- Créer un groupe ACL "admin_sg" Civi, mettre mon nouvel utilisateur dedans, lui faire correspondre un rôle Civi
- Créer 2 ACL pour ce rôle : consulter et éditer les contacts d'un smart group (prééxistant et contenant des contacts)

Une fois logué avec cet utilisateur, j'ai bien le champs de recherche rapide en haut à gauche, mais il ne retourne rien même en tapant les premières lettres d'un contact du groupe ciblé. Sur la page "Rechercher des contacts", seul le smart group ciblé est présent dans le dropdown "dans le groupe", ce qui semble normal. Par contre si je fais une recherche sur ce smart group j'obtiens une erreur de base de donnée :

Code: [Select]
Array
(
    [callback] => Array
        (
            [0] => CRM_Core_Error
            [1] => handle
        )

    [code] => -1
    [message] => DB Error: unknown error
    [mode] => 16
    [debug_info] => SELECT DISTINCT UPPER(LEFT(contact_a.sort_name, 1)) as sort_name  FROM civicrm_contact contact_a  LEFT JOIN civicrm_group_contact_cache `civicrm_group_contact_cache_8` ON contact_a.id = `civicrm_group_contact_cache_8`.contact_id    LEFT JOIN civicrm_group_contact_cache `civicrm_group_contact_cache_8` ON contact_a.id = `civicrm_group_contact_cache_8`.contact_id   WHERE  ( `civicrm_group_contact_cache_8`.group_id IN (8) )  AND  ( 0 )  AND (contact_a.is_deleted = 0)    ORDER BY UPPER(LEFT(contact_a.sort_name, 1)) asc  [nativecode=1066 ** Not unique table/alias: 'civicrm_group_contact_cache_8']
    [type] => DB_Error
    [user_info] => SELECT DISTINCT UPPER(LEFT(contact_a.sort_name, 1)) as sort_name  FROM civicrm_contact contact_a  LEFT JOIN civicrm_group_contact_cache `civicrm_group_contact_cache_8` ON contact_a.id = `civicrm_group_contact_cache_8`.contact_id    LEFT JOIN civicrm_group_contact_cache `civicrm_group_contact_cache_8` ON contact_a.id = `civicrm_group_contact_cache_8`.contact_id   WHERE  ( `civicrm_group_contact_cache_8`.group_id IN (8) )  AND  ( 0 )  AND (contact_a.is_deleted = 0)    ORDER BY UPPER(LEFT(contact_a.sort_name, 1)) asc  [nativecode=1066 ** Not unique table/alias: 'civicrm_group_contact_cache_8']
    [to_string] => [db_error: message="DB Error: unknown error" code=-1 mode=callback callback=CRM_Core_Error::handle prefix="" info="SELECT DISTINCT UPPER(LEFT(contact_a.sort_name, 1)) as sort_name  FROM civicrm_contact contact_a  LEFT JOIN civicrm_group_contact_cache `civicrm_group_contact_cache_8` ON contact_a.id = `civicrm_group_contact_cache_8`.contact_id    LEFT JOIN civicrm_group_contact_cache `civicrm_group_contact_cache_8` ON contact_a.id = `civicrm_group_contact_cache_8`.contact_id   WHERE  ( `civicrm_group_contact_cache_8`.group_id IN (8) )  AND  ( 0 )  AND (contact_a.is_deleted = 0)    ORDER BY UPPER(LEFT(contact_a.sort_name, 1)) asc  [nativecode=1066 ** Not unique table/alias: 'civicrm_group_contact_cache_8']"]
)

La partie intéressante semble être nativecode=1066 ** Not unique table/alias: 'civicrm_group_contact_cache_8'.

Si je lance une recherche sans préciser de groupe (tous les champs vides) je n'obtiens aucun résultat.

J'ai tenté de reconstruire les smart groups (dans la page des travaux programmés), sans succès. Il y a quelques références pour des problèmes similaires sur Jira et sur le forum mais je n'ai pour l'instant aucune piste pour démêler ça.

Quelqu'un aurait-il une piste ?

Merci d'avance


flo81

  • I’m new here
  • *
  • Posts: 21
  • Karma: 1
  • CiviCRM version: 4.5.8
  • CMS version: Drupal 7.34
  • MySQL version: 5.5.40
  • PHP version: 5.4
Re: ACLs pour limiter l'accès à un smart group
March 11, 2015, 05:37:12 am
Je me réponds à moi-même au cas où quelqu'un pourrait en profiter.

Tout se passe correctement si je définis des ACLs pour administrer un nouveau smart group. Il se trouve que j'ai fait une upgrade de 4.5.4 vers 4.5.8 récemment (pour pouvoir utiliser les ACLs sur des smart groups), et que le soucis apparaît uniquement pour les smart groups créé sous 4.5.4. Je suppose qu'il me reste à supprimer / redéfinir mes smart groups avant de créer mes ACLs.

mathieu

  • Administrator
  • Ask me questions
  • *****
  • Posts: 620
  • Karma: 36
    • Work
  • CiviCRM version: 4.7
  • CMS version: Drupal
  • MySQL version: MariaDB 10
  • PHP version: 7
Re: ACLs pour limiter l'accès à un smart group
March 17, 2015, 06:59:40 am
Merci d'avoir partagé la solution!
CiviCamp Montréal, 29 septembre 2017 | Co-founder / consultant / turn-key CiviCRM hosting for Quebec/Canada @ SymbioTIC.coop

Pages: [1]
  • CiviCRM Community Forums (archive) »
  • Language and Locality »
  • Francophone User Group (Moderators: mathieu, xavier) »
  • ACLs pour limiter l'accès à un smart group

This forum was archived on 2017-11-26.