Changeset 99203 in spip-zone


Ignore:
Timestamp:
Aug 18, 2016, 9:50:14 AM (3 years ago)
Author:
marcimat@…
Message:

Ajout de possibilités d'autorisations plus fines encores.

  • Possibilité de définir en autorisation d'un objet les types 'auteur_objet_statut' et 'admin_restreint_objet'.


Le premier complète 'auteur_objet' ajouté en version
2.1.0 par un test supplémentaire sur le statut de l'objet, de sorte qu'un
objet publié refuse l'autorisation pour un rédacteur lié à l'objet.
On a du coup le même comportement que pour l'autorisation de 'modifier'
un article dans SPIP. Cela sous-entend que l'objet gère le champ 'statut'.


Le second complète 'admin_restreint' qui ne s'occupe pas de tester la
rubrique en cours. Le nouveau donne l'autorisation si l'objet
est contenu dans une rubrique gérée par l'administrateur restreint.
Cela sous entend que l'objet gère le champ 'id_rubrique'.


  • Lors de la désinstallation, nettoyer quelques tables de liens assez communes (auteurs, documents, mots).
Location:
_plugins_/fabrique/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/fabrique/trunk/changelog.txt

    r99199 r99203  
    22Ce plugin génère d'autres plugins !
    33-----------------------------------
     4
     52.2.0 le 18 08 2016
     6-------------------
     7
     8* Possibilité de définir en autorisation d'un objet les types 'auteur_objet_statut'
     9  et 'admin_restreint_objet'.
     10 
     11  Le premier complète 'auteur_objet' ajouté en version
     12  2.1.0 par un test supplémentaire sur le statut de l'objet, de sorte qu'un
     13  objet publié refuse l'autorisation pour un rédacteur lié à l'objet.
     14  On a du coup le même comportement que pour l'autorisation de 'modifier'
     15  un article dans SPIP. Cela sous-entend que l'objet gère le champ 'statut'.
     16 
     17  Le second complète 'admin_restreint' qui ne s'occupe pas de tester la
     18  rubrique en cours. Le nouveau donne l'autorisation si l'objet
     19  est contenu dans une rubrique gérée par l'administrateur restreint.
     20  Cela sous entend que l'objet gère le champ 'id_rubrique'.
     21 
     22* Lors de la désinstallation, nettoyer quelques tables de liens assez communes
     23  (auteurs, documents, mots).
    424
    5252.1.0 le 18 08 2016
  • _plugins_/fabrique/trunk/fabrique/prefixe_administrations.php.html

    r88209 r99203  
    7070        sql_drop_table("#VALEUR");</BOUCLE_tables>
    7171<BOUCLE_objets_autres_nettoyages(CONDITION){si #OBJETS}>
     72        # Nettoyer les liens courants (le génie optimiser_base_disparus se chargera de nettoyer toutes les tables de liens),
     73        [(#VAL{'sql_delete("spip_documents_liens",'}   |espacer{40})] sql_in("objet", [(#LES_TYPES|ecrire_tableau)]));
     74        [(#VAL{'sql_delete("spip_mots_liens",'}        |espacer{40})] sql_in("objet", [(#LES_TYPES|ecrire_tableau)]));
     75        [(#VAL{'sql_delete("spip_auteurs_liens",'}     |espacer{40})] sql_in("objet", [(#LES_TYPES|ecrire_tableau)]));
    7276        # Nettoyer les versionnages et forums
    7377        [(#VAL{'sql_delete("spip_versions",'}          |espacer{40})] sql_in("objet", [(#LES_TYPES|ecrire_tableau)]));
  • _plugins_/fabrique/trunk/fabrique/prefixe_autorisations.php.html

    r99199 r99203  
    149149}</BOUCLE_associer_objets>[(#REM)
    150150]</BOUCLE_objets>[(#REM)
    151 ]<BOUCLE_aide_auteur(CONDITION){si #OBJETS|objets_autorisation_presente{auteur_objet}}>[(#REM)
    152 ]/**
     151]<BOUCLE_aide_auteur(CONDITION){si #OBJETS|objets_autorisations_presentes{#LISTE{auteur_objet,auteur_objet_statut}}}>
     152/**
    153153 * Lister les auteurs liés à un objet
    154154 *
     
    164164        return array();
    165165}
    166 <BOUCLE_aide_auteur_rubrique(CONDITION){si #OBJETS|objets_champ_present{id_rubrique}}>
     166</BOUCLE_aide_auteur>[(#REM)
     167]<BOUCLE_aide_auteur_rubrique(CONDITION)
     168        {si #OBJETS|objets_autorisations_presentes{#LISTE{auteur_objet,auteur_objet_statut,admin_restreint_objet}}}
     169        {si #OBJETS|objets_champ_present{id_rubrique}}>
    167170/**
    168171 * Tester si on est administrateur complet ou admin restreint sur cette rubrique
     
    178181}
    179182</BOUCLE_aide_auteur_rubrique>[(#REM)
    180 ]</BOUCLE_aide_auteur>
     183]<BOUCLE_aide_objet_statut(CONDITION)
     184        {si #OBJETS|objets_autorisation_presente{auteur_objet_statut}}
     185        {si #OBJETS|objets_champ_present{statut}}>
     186/**
     187 * Tester si le statut de l'objet autorise des changements, en fonction du statut de l'auteur.
     188 *
     189 * @param  string $objet    Type d'objet
     190 * @param  int    $id_objet Identifiant de l'objet
     191 * @param  array  $qui      Description de l'auteur demandant l'autorisation
     192 * @param  array  $opt      Options de l'autorisation
     193 * @return bool             true s'il a le droit, false sinon
     194 **/
     195function [(#PREFIXE)]_autoriser_statuts($objet, $id_objet, $qui, $opt) {
     196        $statut = sql_getfetsel('statut', table_objet_sql($objet), id_table_objet($objet) . ' = ' . intval($id_objet));
     197        return (!isset($opt['statut']) or $opt['statut'] !== 'publie')
     198                and in_array($qui['statut'], array('0minirezo', '1comite'))
     199                and in_array($statut, array('prop', 'prepa', 'poubelle'));
     200}
     201</BOUCLE_aide_objet_statut>[(#REM)
     202]
  • _plugins_/fabrique/trunk/fabrique_fonctions.php

    r99200 r99203  
    11801180                        break;
    11811181
     1182                // au moins auteur de l'objet, ou administrateur complet ou admin restreint sur rubrique de l'objet
    11821183                case "auteur_objet":
    11831184                        $auteurs_objet = '$auteurs = ' . $prefixe . '_auteurs_objet(\'' . $objet['type'] . '\', $id) and in_array($qui[\'id_auteur\'], $auteurs)';
     
    11851186                                $admin = $prefixe . '_autoriser_admins(\'' . $objet['type'] . '\', $id, $qui)';
    11861187                        } else {
    1187                                 $admin = '$qui[\'statut\'] == \'0minirezo\' and !$qui[\'restreint\']';
    1188                         }
    1189                         return "(($admin) or ($auteurs_objet))";
     1188                                $admin = '($qui[\'statut\'] == \'0minirezo\' and !$qui[\'restreint\'])';
     1189                        }
     1190                        return "$admin\n\t\tor ($auteurs_objet)";
     1191                        break;
     1192
     1193                // au moins auteur de l'objet si l'objet n'est pas publié, ou administrateur complet ou admin restreint sur la rubrique de l'objet
     1194                // Note : normalement statut doit forcément être présent pour ce test !
     1195                case "auteur_objet_statut":
     1196                        $auteurs_objet = '$auteurs = ' . $prefixe . '_auteurs_objet(\'' . $objet['type'] . '\', $id) and in_array($qui[\'id_auteur\'], $auteurs)';
     1197                        $test_statut = $prefixe . '_autoriser_statuts(\'' . $objet['type'] . '\', $id, $qui, $opt)';
     1198                        if (champ_present($objet, 'id_rubrique')) {
     1199                                $admin = $prefixe . '_autoriser_admins(\'' . $objet['type'] . '\', $id, $qui)';
     1200                        } else {
     1201                                $admin = '($qui[\'statut\'] == \'0minirezo\' and !$qui[\'restreint\'])';
     1202                        }
     1203                        if (champ_present($objet, 'statut')) {
     1204                                return "$admin\n\t\tor ($test_statut\n\t\t\tand $auteurs_objet)";
     1205                        } else {
     1206                                return "$admin\n\t\tor ($auteurs_objet)";
     1207                        }
    11901208                        break;
    11911209
    11921210                case "redacteur":
    11931211                        return "in_array(\$qui['statut'], array('0minirezo', '1comite'))";
     1212                        break;
     1213
     1214                // Au moins administrateur complet ou restreint sur la rubrique sur l'objet
     1215                // Note : normalement id_rubrique doit forcément être présent pour ce test !
     1216                case "administrateur_restreint_objet":
     1217                        if (champ_present($objet, 'id_rubrique')) {
     1218                                $admin = $prefixe . '_autoriser_admins(\'' . $objet['type'] . '\', $id, $qui)';
     1219                        } else {
     1220                                $admin = '$qui[\'statut\'] == \'0minirezo\' and !$qui[\'restreint\']';
     1221                        }
     1222                        return $admin;
    11941223                        break;
    11951224
     
    12841313}
    12851314
     1315
     1316/**
     1317 * Retourne vrai si au moins une autorisation est d'un des types spécifiés
     1318 * dans l'ensemble des autorisations à configurer de tous les objets
     1319 *
     1320 * @param array $objets
     1321 *              Descriptions des objets de la Fabrique
     1322 * @param string[] $recherches
     1323 *              Les types d'autorisations recherchés
     1324 * @return bool
     1325**/
     1326function objets_autorisations_presentes($objets, $recherches) {
     1327        foreach ($recherches as $autorisation) {
     1328                if (objets_autorisation_presente($objets, $autorisation)) {
     1329                        return true;
     1330                }
     1331        }
     1332        return false;
     1333}
     1334
    12861335/**
    12871336 * Retourne vrai si un test d'autorisation est d'un type spécifié
  • _plugins_/fabrique/trunk/formulaires/inc-fabriquer_plugin_objet.html

    r99199 r99203  
    2121
    2222<h3><a href="#description"><:fabrique:legend_description:></a></h3>
    23 <div>
     23<div class='sous_parties'>
    2424        <div class='editer-groupe'>
    2525        [(#SAISIE{input, objets/#CLE/nom,
     
    4646
    4747<h3><a href="#description"><:fabrique:legend_logo:></a></h3>
    48 <div>
     48<div class='sous_parties'>
    4949        <div class='editer-groupe'>
    5050        [(#REM) valeur vide pour eviter une notice car sinon, la valeur recue est un tableau ]
     
    218218
    219219<h3><a href="#champs_speciaux"><:fabrique:legend_champs_speciaux:></a></h3>
    220 <div>
     220<div class='sous_parties'>
    221221
    222222        <fieldset>
     
    395395
    396396<h3><a href="#fichiers_supplementaires"><:fabrique:legend_fichiers_supplementaires:></a></h3>
    397 <div>
     397<div class='sous_parties'>
    398398        <div class='editer-groupe'>
    399399                [(#SET{data,[(#ARRAY{
     
    437437
    438438<h3><a href="#autorisations"><:fabrique:legend_autorisations:></a></h3>
    439 <div>
     439<div class='sous_parties'>
     440
     441        <div class='explication'>
     442                <p><:fabrique:legend_autorisations_explication:></p>
     443                <B_types_autorisations>
     444                        <dl>
     445                <BOUCLE_types_autorisations(DATA){liste
     446                        toujours,
     447                        auteur_objet,
     448                        auteur_objet_statut,
     449                        redacteur,
     450                        administrateur_restreint_objet,
     451                        administrateur_restreint,
     452                        administrateur,
     453                        webmestre,
     454                        jamais}>
     455                                <dt>[(#VAL{fabrique:autorisation_}|concat{#VALEUR}|_T)]</dt>
     456                                <dl>[(#VAL{fabrique:autorisation_}|concat{#VALEUR}|concat{_explication}|_T)]</dl>
     457                </BOUCLE_types_autorisations>
     458                        </dl>
     459                </B_types_autorisations>
     460        </div>
     461
    440462        <B_autorisations>
    441463        <div class='editer-groupe'>
     
    453475                toujours,<:fabrique:autorisation_toujours:>,
    454476                auteur_objet,<:fabrique:autorisation_auteur_objet:>,
     477                auteur_objet_statut,<:fabrique:autorisation_auteur_objet_statut:>,
    455478                redacteur,<:fabrique:autorisation_redacteur:>,
     479                administrateur_restreint_objet,<:fabrique:autorisation_administrateur_restreint_objet:>,
    456480                administrateur_restreint,<:fabrique:autorisation_administrateur_restreint:>,
    457481                administrateur,<:fabrique:autorisation_administrateur:>,
     
    460484
    461485        [(#REM) Pas de choix "Auteur de l'objet" à la création… ]
    462         [(#VALEUR|=={objet_creer}|oui) [(#SET{choix,#GET{choix}|array_diff_key{#ARRAY{auteur_objet,0}}})] ]
     486        [(#VALEUR|=={objet_creer}|oui) [(#SET{choix,#GET{choix}|array_diff_key{#LISTE{auteur_objet,auteur_objet_statut}|array_flip}})] ]
    463487
    464488        [(#SAISIE{selection, objets/#_objet:CLE/autorisations/#VALEUR,
     
    481505
    482506<h3><a href="#options"><:fabrique:legend_options:></a></h3>
    483 <div>
     507<div class='sous_parties'>
    484508        <div class='editer-groupe'>
    485509        [(#REM)
  • _plugins_/fabrique/trunk/lang/fabrique_fr.php

    r99199 r99203  
    1212        'aide_creation_peupler_table' => 'Aide à la création de peuplement d’une table',
    1313        'aide_creation_squelette_fabrique' => 'Aide à la création de squelettes Fabrique',
    14         'autorisation_administrateur' => 'Être au moins administrateur complet',
    15         'autorisation_administrateur_restreint' => 'Être au moins administrateur restreint',
    16         'autorisation_auteur_objet' => 'Être auteur de l’objet ou au moins administrateur complet (ou restreint si l’objet a le champ id_rubrique)',
     14        'autorisation_administrateur' => '≥ Administrateur complet',
     15        'autorisation_administrateur_explication' => 'Être au moins administrateur complet.',
     16        'autorisation_administrateur_restreint' => '≥ Administrateur restreint',
     17        'autorisation_administrateur_restreint_explication' => 'Être au moins administrateur restreint (quelque soit la rubrique).',
     18        'autorisation_administrateur_restreint_objet' => '≥ Administrateur restreint + rubrique',
     19        'autorisation_administrateur_restreint_explication' => 'Être au moins administrateur restreint de la rubrique (nécessite un champ id_rubrique).',
     20        'autorisation_auteur_objet' => '≥ Auteur de l’objet',
     21        'autorisation_auteur_objet_explication' => 'Être auteur de l’objet ou au moins administrateur complet (ou restreint si l’objet a le champ id_rubrique).',
     22        'autorisation_auteur_objet_statut' => '≥ Auteur de l’objet sauf si publié',
     23        'autorisation_auteur_objet_statut_explication' => 'Être auteur de l’objet sauf si l’objet est publié
     24                (nécessite la gestion des statuts) ou au moins administrateur complet (ou restreint si l’objet a le champ id_rubrique).',
    1725        'autorisation_defaut' => 'Par défaut (@defaut@)',
    1826        'autorisation_jamais' => 'Jamais',
    19         'autorisation_redacteur' => 'Être au moins rédacteur',
     27        'autorisation_jamais_explication' => 'Renvoie toujours non !',
     28        'autorisation_redacteur' => '≥ Rédacteur',
     29        'autorisation_redacteur_explication' => 'Être au moins rédacteur (qu’on soit ou non l’auteur de l’objet).',
    2030        'autorisation_toujours' => 'Toujours',
    21         'autorisation_webmestre' => 'Être webmestre',
     31        'autorisation_toujours_explication' => 'Renvoie toujours oui !',
     32        'autorisation_webmestre' => 'Webmestre',
     33        'autorisation_webmestre_explication' => 'Être webmestre sur le site.',
    2234        'avertissement_champs' => 'N’insérez pas ici la clé primaire (@id_objet@),
    2335                ni aucun des champs spéciaux (id_rubrique, lang, etc.) proposés dans la partie suivante.',
     
    338350        'label_vue_liens_explication' => 'Ajoute un formulaire d’édition de liens sur les objets :',
    339351        'legend_autorisations' => 'Autorisations',
     352        'legend_autorisations_explication' => 'Permet de définir pour certaines actions sur l’objet éditorial,
     353                tel que sa modification, les tests d’autorisations qui seront effectués. Ils peuvent dépendre
     354                du statut de l’auteur, de la rubrique d’appartenance de l’objet (s’il dispose du champ id_rubrique),
     355                ou encore du statut de l’objet lui-même (s’il est déjà publié ou non).
     356                L’autorisation de <code>creer</code> n’a pas toutes les options.',
    340357        'legend_chaines_langues' => 'Chaînes de langue',
    341358        'legend_champs' => 'Champs',
  • _plugins_/fabrique/trunk/paquet.xml

    r99199 r99203  
    22        prefix="fabrique"
    33        categorie="outil"
    4         version="2.1.0"
     4        version="2.2.0"
    55        etat="test"
    66        compatibilite="[3.1.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.