Changeset 99199 in spip-zone


Ignore:
Timestamp:
Aug 17, 2016, 10:20:58 PM (3 years ago)
Author:
marcimat@…
Message:

Possibilité d'attribuer un test d'autorisation 'auteur_objet' qui autorise
lorsque l'auteur en test est lié à l'objet (ie : il est un des auteurs de l'objet).

Cette autorisation retourne vrai aussi pour les administrateurs complets
ou les administrateurs restreints de la rubrique de l'objet si cet objet
peut être placé dans une rubrique (ie: il a un champ id_rubrique).

On mutualise du code entre tous les objets éditoriaux créés dès lors
que ce type d'autorisation est demandé.

Location:
_plugins_/fabrique/trunk
Files:
6 edited

Legend:

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

    r95046 r99199  
    33-----------------------------------
    44
    5 
     52.1.0 le 18 08 2016
     6-------------------
     7
     8* Possibilité de définir en autorisation d'un objet un type 'auteur_objet'
     9  qui permet aux auteurs liés à l'objet et aux administrateurs d'avoir
     10  l'autorisation en question.
     11 
     12  Si l'objet est affectable à une rubrique, un administrateur restreint
     13  à cette rubrique a le droit d'éditer l'objet aussi.
     14 
     15  Le code généré actuellement ne s'occupe pas de la présence d'un champ statut.
     16  Il faudrait peut être un autre type d'autorisation encore plus fin pour ça,
     17  qui ressemblerait du coup fortement à l'autorisation de modifier un article.
     18 
    6192.0.27 le 09 02 2016
    720--------------------
  • _plugins_/fabrique/trunk/fabrique/prefixe_autorisations.php.html

    r88209 r99199  
    6666/**
    6767 * Autorisation de créer \(#GET{type}\)
    68  *[(#SET{creer,[(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_creer})]})]
     68 *[(#SET{creer,[(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_creer, #PREFIXE, #VALEUR})]})]
    6969 * @param  string $faire Action demandée
    7070 * @param  string $type  Type d'objet sur lequel appliquer l'action
     
    9090**/
    9191function autoriser_#GET{type}_voir_dist($faire, $type, $id, $qui, $opt) {
    92         return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_voir})];
     92        return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_voir, #PREFIXE, #VALEUR})];
    9393}
    9494
     
    104104**/
    105105function autoriser_#GET{type}_modifier_dist($faire, $type, $id, $qui, $opt) {
    106         return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_modifier})];
     106        return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_modifier, #PREFIXE, #VALEUR})];
    107107}
    108108
     
    118118**/
    119119function autoriser_#GET{type}_supprimer_dist($faire, $type, $id, $qui, $opt) {
    120         return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_supprimer})];
     120        return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_supprimer, #PREFIXE, #VALEUR})];
    121121}
    122122<BOUCLE_creer_objet_dans_rubrique(CONDITION){si (#VAL{vue_rubrique}|in_any{#VALEUR{rubriques}})}>
     
    146146**/
    147147function autoriser_associer#GET{objet}_dist($faire, $type, $id, $qui, $opt) {
    148         return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{associerobjet})];
    149 }</BOUCLE_associer_objets>
    150 </BOUCLE_objets>
     148        return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{associerobjet, #OBJET, #VALEUR|champ_present{id_rubrique}})];
     149}</BOUCLE_associer_objets>[(#REM)
     150]</BOUCLE_objets>[(#REM)
     151]<BOUCLE_aide_auteur(CONDITION){si #OBJETS|objets_autorisation_presente{auteur_objet}}>[(#REM)
     152]/**
     153 * Lister les auteurs liés à un objet
     154 *
     155 * @param int $objet Type de l'objet
     156 * @param int $id_objet Identifiant de l'objet
     157 * @return array        Liste des id_auteur trouvés
     158 */
     159function [(#PREFIXE)]_auteurs_objet($objet, $id_objet) {
     160        $auteurs = sql_allfetsel('id_auteur', 'spip_auteurs_liens', array('objet = ' . sql_quote($objet), 'id_objet = ' . intval($id_objet)));
     161        if (is_array($auteurs)) {
     162                return array_map('reset', $auteurs);
     163        }
     164        return array();
     165}
     166<BOUCLE_aide_auteur_rubrique(CONDITION){si #OBJETS|objets_champ_present{id_rubrique}}>
     167/**
     168 * Tester si on est administrateur complet ou admin restreint sur cette rubrique
     169 *
     170 * @param  string $objet    Type d'objet
     171 * @param  int    $id_objet Identifiant de l'objet
     172 * @param  array  $qui      Description de l'auteur demandant l'autorisation
     173 * @return bool             true s'il a le droit, false sinon
     174 **/
     175function [(#PREFIXE)]_autoriser_admins($objet, $id_objet, $qui) {
     176        $id = sql_getfetsel('id_rubrique', table_objet_sql($objet), id_table_objet($objet) . ' = ' . intval($id_objet));
     177        return ($qui['statut'] == '0minirezo') and (!$qui['restreint'] or !$id or in_array($id, $qui['restreint']));
     178}
     179</BOUCLE_aide_auteur_rubrique>[(#REM)
     180]</BOUCLE_aide_auteur>
  • _plugins_/fabrique/trunk/fabrique_fonctions.php

    r95046 r99199  
    11601160 *
    11611161 * @param string $type
    1162  *              Quelle type d'autorisation est voulue
    1163  * @return string
    1164  *              Code de test de l'autorisation
    1165 **/
    1166 function fabrique_code_autorisation($type) {
     1162 *     Quelle type d'autorisation est voulue
     1163 * @param string $prefixe
     1164 *     Préfixe du plugin généré
     1165 * @param array $objet
     1166 *     Description de l'objet dans la Fabrique
     1167 * @return string
     1168 *     Code de test de l'autorisation
     1169**/
     1170function fabrique_code_autorisation($type, $prefixe, $objet) {
     1171
    11671172        switch($type) {
    11681173
     
    11731178                case "toujours":
    11741179                        return "true";
     1180                        break;
     1181
     1182                case "auteur_objet":
     1183                        $auteurs_objet = '$auteurs = ' . $prefixe . '_auteurs_objet(\'' . $objet['type'] . '\', $id) and in_array($qui[\'id_auteur\'], $auteurs)';
     1184                        if (champ_present($objet, 'id_rubrique')) {
     1185                                $admin = $prefixe . '_autoriser_admins(\'' . $objet['type'] . '\', $id, $qui)';
     1186                        } else {
     1187                                $admin = '$qui[\'statut\'] == \'0minirezo\' and !$qui[\'restreint\']';
     1188                        }
     1189                        return "(($admin) or ($auteurs_objet))";
    11751190                        break;
    11761191
     
    12281243 *
    12291244 * @param array $autorisations
    1230  *              Les autorisations renseignees par l'interface pour un objet
     1245 *     Les autorisations renseignees par l'interface pour un objet
    12311246 * @param string $autorisation
    1232  *              Le nom de l'autorisation souhaitee
    1233  * @return string
    1234  *              Code de l'autorisation
    1235 **/
    1236 function fabrique_code_autorisation_defaut($autorisations, $autorisation) {
     1247 *     Le nom de l'autorisation souhaitee
     1248 * @param string $prefixe
     1249 *     Préfixe du plugin généré
     1250 * @param array $objet
     1251 *     Description le l'objet dans la Fabrique
     1252 * @return string
     1253 *     Code de l'autorisation
     1254**/
     1255function fabrique_code_autorisation_defaut($autorisations, $autorisation, $prefixe, $objet) {
    12371256        if (!$autorisation) return "";
    12381257
     
    12431262
    12441263        // retourner le code PHP correspondant
    1245         return fabrique_code_autorisation($type);
     1264        return fabrique_code_autorisation($type, $prefixe, $objet);
     1265}
     1266
     1267/**
     1268 * Retourne vrai si un test d'autorisation est d'un type spécifié
     1269 * dans l'ensemble des autorisations à configurer de tous les objets
     1270 *
     1271 * @param array $objets
     1272 *              Descriptions des objets de la Fabrique
     1273 * @param string $recherche
     1274 *              Le type d'autorisation recherché
     1275 * @return bool
     1276**/
     1277function objets_autorisation_presente($objets, $recherche) {
     1278        foreach ($objets as $objet) {
     1279                if (autorisation_presente($objet, $recherche)) {
     1280                        return true;
     1281                }
     1282        }
     1283        return false;
     1284}
     1285
     1286/**
     1287 * Retourne vrai si un test d'autorisation est d'un type spécifié
     1288 * dans l'ensemble des autorisations à configurer d'un objet
     1289 *
     1290 * @param array $objet
     1291 *              Description d'un objet de la Fabrique
     1292 * @param string $recherche
     1293 *              Le type d'autorisation recherché
     1294 * @return bool
     1295**/
     1296function autorisation_presente($objet, $recherche) {
     1297        foreach ($objet['autorisations'] as $autorisation => $type) {
     1298                if (!$type) {
     1299                        $type = fabrique_autorisation_defaut($autorisation);
     1300                }
     1301                if ($type == $recherche) {
     1302                        return true;
     1303                }
     1304        }
     1305        return false;
    12461306}
    12471307
  • _plugins_/fabrique/trunk/formulaires/inc-fabriquer_plugin_objet.html

    r92834 r99199  
    449449        [(#SET{defaut,[(#VAL{fabrique:autorisation_}|concat{[(#VALEUR|fabrique_autorisation_defaut)]}|_T)]})]
    450450        [(#SET{defaut,[(#VAL{fabrique:autorisation_defaut}|_T{#ARRAY{defaut,#GET{defaut}}})]})]
     451        [(#SET{choix,[(#ARRAY{
     452                '',#GET{defaut},
     453                toujours,<:fabrique:autorisation_toujours:>,
     454                auteur_objet,<:fabrique:autorisation_auteur_objet:>,
     455                redacteur,<:fabrique:autorisation_redacteur:>,
     456                administrateur_restreint,<:fabrique:autorisation_administrateur_restreint:>,
     457                administrateur,<:fabrique:autorisation_administrateur:>,
     458                webmestre,<:fabrique:autorisation_webmestre:>,
     459                jamais,<:fabrique:autorisation_jamais:>})]})]
     460
     461        [(#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}}})] ]
     463
    451464        [(#SAISIE{selection, objets/#_objet:CLE/autorisations/#VALEUR,
    452465                label=[(#VALEUR|cle_de_langue{#ARRAY{objet,#GET{objets},type,#GET{type}}})],
    453466                cacher_option_intro=oui,
    454                 datas=[(#ARRAY{
    455                         '',#GET{defaut},
    456                         toujours,<:fabrique:autorisation_toujours:>,
    457                         redacteur,<:fabrique:autorisation_redacteur:>,
    458                         administrateur_restreint,<:fabrique:autorisation_administrateur_restreint:>,
    459                         administrateur,<:fabrique:autorisation_administrateur:>,
    460                         webmestre,<:fabrique:autorisation_webmestre:>,
    461                         jamais,<:fabrique:autorisation_jamais:>})]})]
     467                datas=#GET{choix}})]
    462468        </BOUCLE_autorisations>
    463469        </div>
  • _plugins_/fabrique/trunk/lang/fabrique_fr.php

    r97324 r99199  
    1414        'autorisation_administrateur' => 'Être au moins administrateur complet',
    1515        '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)',
    1617        'autorisation_defaut' => 'Par défaut (@defaut@)',
    1718        'autorisation_jamais' => 'Jamais',
  • _plugins_/fabrique/trunk/paquet.xml

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