Changeset 46261 in spip-zone


Ignore:
Timestamp:
Apr 2, 2011, 10:09:34 AM (9 years ago)
Author:
marcimat@…
Message:

Nouveau define dans les types de restrictions
AR_TYPE_RESTRICTION_PARENTEE = faible

Par défaut dans Acces restreint, si une rubrique 1 restreinte par une zone A englobe une sous rubrique 2 restreinte par une zone B, alors

  • A ne peut pas voir 2
  • B ne peut pas voir 1

On ne peut voir que sur les restrictions dont on a tous les droits : pour qu'un auteur puisse voir (2), il doit faire partie de A et de B. Pour qu'un auteur puisse voir 1, il doit faire partie de A.

Avec :

  • AR_TYPE_RESTRICTION = faible :

on peut déjà de dire qu'une zone accède à des sous rubriques quelque soit la restriction appliquée à celle-ci en plus. Ainsi on obtient que :

  • un auteur de la zone A peut voir 2 (et 1 bien sûr), car 2 est contenu dans 1.
  • mais un auteur de B ne peut pas voir 1 (parent de 2). Il ne peut que voir 2.

Avec le nouveau (en cumul avec AR_TYPE_RESTRICTION = faible) :

  • AR_TYPE_RESTRICTION_PARENTEE = faible

On peut dire qu'un auteur voyant une rubrique restreinte dans une certaine profondeur a accès aux rubriques parentes, mêmes restreintes (mais pas aux frères restreints tout de même !). Dans ce cas :

  • un auteur de A voit 2 (deja fait avec AR_TYPE_RESTRICTION = faible)
  • au auteur de B voit 1 (le parent de 2)

De la sorte, on peut imaginer des rubriques
[ ] Projets
-- [ ] Projet A
-- [ ] Projet B

Si une zone existe pour le projet A, incluant quelques personnes, et qu'une zone existe pour «Projets» incluant les «collaborateurs» : les collaborateurs peuvent voir tous les projets, les participants de A peuvent voir le projet A ET la rubrique «Projets» parente : qui ne listera que «Projet A» avec les squelettes SPIP par défaut.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/acces_restreint/inc/acces_restreint.php

    r41069 r46261  
    7878}
    7979
     80
     81/**
     82 * liste des rubriques d'une zone et leurs rubriques parentes.
     83 *
     84 * @param int/string $id_zone
     85 * @return array
     86 */
     87function accesrestreint_liste_parentee_zone_rub($id_zone){
     88        include_spip('inc/rubriques');
     89        $liste_rubriques = accesrestreint_liste_contenu_zone_rub_direct($id_zone);
     90        if (!count($liste_rubriques))
     91                return $liste_rubriques;
     92
     93        $id = $liste_rubriques;
     94        while ($parents = sql_allfetsel('id_parent', 'spip_rubriques',
     95        sql_in('id_rubrique', $id))) {
     96                $parents = array_map('array_shift', $parents);
     97                $parents = array_diff($parents, array(0));
     98                $id = $parents;
     99                $liste_rubriques = array_merge($liste_rubriques, $parents);
     100        }
     101       
     102        return $liste_rubriques;
     103}
     104
    80105/**
    81106 * Lister les zones auxquelles un auteur appartient
     
    157182                        $where[] = sql_in('zr.id_zone',accesrestreint_liste_zones_autorisees('',$id_auteur),'NOT');
    158183
     184                // liste les rubriques (+branches) des zones dont ne fait pas parti l'auteur
    159185                $liste_rub_exclues[$id_auteur][$publique] = accesrestreint_liste_contenu_zone_rub($where);
    160186                #$liste_rub_exclues[$publique] = array_unique($liste_rub_exclues[$publique]);
     
    169195                // plusieurs zones, aux membres de chaque zone concernee.
    170196                // valeurs : 'faible', 'forte, ou 'exclusive'           
    171                
     197
     198                // Autrement dit, si une rubrique 2 est enfant d'une rubrique 1,
     199                // et qu'il existe une zone 1 (rubrique 1) et une zone 2 (rubrique 2) :
     200                // - un auteur present dans la zone 1 (uniquement) ne pourra pas voir la rubrique 2
     201                //   lorsque la restriction est "forte". Il le pourra avec une restriction "faible"
     202                //
     203                // - A l'inverse, un auteur present uniquement dans la zone 2 ne pourra pas voir
     204                //   la rubrique 1 meme si la restriction est "faible" car la parentee n'est pas concernee.
     205                //   il faut (si souhaite) dans ce cas definir en plus AR_TYPE_RESTRICTION_PARENTEE a "faible"
     206                //   pour l'autoriser.
    172207                if (!isset($liste_rub_inclues[$id_auteur][$publique]) OR !is_array($liste_rub_inclues[$id_auteur][$publique])) {
    173208
     
    187222                                $where[] = sql_in('zr.id_zone',accesrestreint_liste_zones_autorisees('',$id_auteur));
    188223
     224                        // liste les rubriques (+branches) des zones de l'auteur
    189225                        $liste_rub_inclues[$id_auteur][$publique] = accesrestreint_liste_contenu_zone_rub($where);
     226
     227                        // pour autoriser la vue des rubriques parentes
     228                        // memes si elles sont restreintes par une autre zone
     229                        if (defined("AR_TYPE_RESTRICTION_PARENTEE") AND AR_TYPE_RESTRICTION_PARENTEE == "faible") {
     230                                $liste_rub_inclues[$id_auteur][$publique] =
     231                                        array_merge($liste_rub_inclues[$id_auteur][$publique],
     232                                                accesrestreint_liste_parentee_zone_rub($where));
     233                        }
    190234                }
    191235
Note: See TracChangeset for help on using the changeset viewer.