Changeset 9909 in spip-zone


Ignore:
Timestamp:
Feb 26, 2007, 8:18:56 AM (13 years ago)
Author:
cedric@…
Message:

formalisation de l'API autoriser pour les donnees :
un couche intermediaire autoriser_donnee_dist dispatche les appels autoriser en fonction du type de la table({$type_form}_donnee , ou a defaut sur table_donne ou a defaut sur form_donnee
simplifie le code intrinseque en faisant systematiquement appel a autoriser(faire,'donnee',$id_donnee..) tout en permettant la definition personalisee des autorisations par les plugins

Location:
_plugins_/_stable_/forms/forms_et_tables_1_9_1
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/action/forms_donnee_supprime.php

    r7343 r9909  
    2626                if (!include_spip('inc/autoriser'))
    2727                        include_spip('inc/autoriser_compat');
    28                 if (autoriser('supprimerdonnee','form',$id_form)){
     28                if (autoriser('supprimer','donnee',$id_donnee,NULL,array('id_form'=>$id_form))){
    2929                        if ($result = spip_query("DELETE FROM spip_forms_donnees WHERE id_form="._q($id_form)." AND id_donnee="._q($id_donnee)))
    3030                                $result = spip_query("DELETE FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee));
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/action/table_donnee_deplace.php

    r8189 r9909  
    5050                                }
    5151                        }
    52                         if (autoriser('modifierdonnee','form',$id_form,NULL,array('id_donnee'=>$id_donnee)))
     52                        if (autoriser('modifier','donnee',$id_donnee,NULL,array('id_form'=>$id_form)))
    5353                                Forms_rang_update($id_donnee,$rang_nouv);
    5454                }
    5555                else {
    56                         if (autoriser('modifierdonnee','form',$id_form,NULL,array('id_donnee'=>$id_donnee))){
     56                        if (autoriser('modifier','donnee',$id_donnee,NULL,array('id_form'=>$id_form))){
    5757                                $rang_nouv = _request('rang_nouv');
    5858                                Forms_rang_update($id_donnee,$rang_nouv);
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/exec/template/donnees_tous.html

    r9896 r9909  
    2222<thead>
    2323        <tr>
    24                 <th class='neutre'></th>#SET{offset,#GET{offset}|plus{1}}
     24                <th class='neutre' style='width:12px'></th>#SET{offset,#GET{offset}|plus{1}}
    2525                <th class='neutre'>id</th>#SET{offset,#GET{offset}|plus{1}}
    2626                [(#ENV{affiche_rang,1}|?{' '})<th>Rang</th>#SET{offset,#GET{offset}|plus{1}}]
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/forms_options.php

    r9886 r9909  
    2727        return false;
    2828}
    29 function autoriser_form_modifierdonnee_dist($faire, $type, $id_form, $qui, $opt) {
     29function autoriser_donnee_dist($faire,$type,$id_donnee,$qui,$opt){
     30        static $types = array();
     31        if (!isset($opt['id_form'])){
     32                $res = spip_query("SELECT id_form FROM spip_forms_donnees WHERE id_donnee="._q($id_donnee));
     33                if (!$row = spip_fetch_array($res)) return false;
     34                $opt['id_form'] = $row['id_form'];
     35        }
     36        $id_form = $opt['id_form'];
     37        if (!isset($opt['type_form'])){
     38                if (!isset($types[$id_form])){
     39                        $res = spip_query("SELECT type_form FROM spip_forms WHERE id_form="._q($id_form));
     40                        if (!$row = spip_fetch_array($res)) return false;
     41                        $types[$id_form] = $row['type_form'];
     42                }
     43                $opt['type_form'] = $types[$id_form];
     44        }
     45        $type_form = in_array($opt['type_form'],array('','sondage'))?'form':$opt['type_form'];
     46        // Chercher une fonction d'autorisation explicite
     47        if (
     48        // 1. Sous la forme "autoriser_type_form_donnee_faire"
     49                (
     50                $type_form
     51                AND $f = 'autoriser_'.$type_form.'_donnee_'.$faire
     52                AND (function_exists($f) OR function_exists($f.='_dist'))
     53                )
     54
     55        // 2. Sous la forme "autoriser_type_form_donnee"
     56        OR (
     57                $type_form
     58                AND $f = 'autoriser_'.$type_form.'_donnee'
     59                AND (function_exists($f) OR function_exists($f.='_dist'))
     60                )
     61        // 3. Sous la forme "autoriser_table_donnee_faire"
     62        OR (
     63                $f = 'autoriser_table_donnee_'.$faire
     64                AND (function_exists($f) OR function_exists($f.='_dist'))
     65        )
     66        // 4. Sous la forme "autoriser_table_donnee_faire"
     67        OR (
     68                $f = 'autoriser_table_donnee'
     69                AND (function_exists($f) OR function_exists($f.='_dist'))
     70        )
     71
     72        // 5. Sinon autorisation generique
     73        OR (
     74                $f = 'autoriser_form'
     75                AND (function_exists($f) OR function_exists($f.='_dist'))
     76        )
     77
     78        )
     79                $a = $f($faire,$type,intval($id),$qui,$opt);
     80        if (_DEBUG_AUTORISER) spip_log("autoriser_form_donnee_dist delegue a $f($faire,$type,$id): ".($a?'OK':'niet'));
     81        return $a;
     82}
     83
     84function autoriser_form_donnee_modifier_dist($faire, $type, $id_donnee, $qui, $opt) {
     85        if (!isset($opt['id_form']) OR !$id_form = $opt['id_form']) return false;
    3086        // un admin dans le back office a toujours le droit de modifier
    31         if (!$opt['id_donnee']) return false;
    3287        if (($qui['statut'] == '0minirezo')) return true;
    3388        $result = spip_query("SELECT * FROM spip_forms WHERE id_form="._q($id_form));
     
    48103        return false;
    49104}
    50 function autoriser_form_insererdonnee_dist($faire, $type, $id_form, $qui, $opt) {
     105function autoriser_table_donnee_modifier_dist($faire, $type, $id_donnee, $qui, $opt) {
     106        return autoriser_form_donnee_modifier_dist($faire, $type, $id_donnee, $qui, $opt);
     107}
     108function autoriser_form_donnee_creer_dist($faire, $type, $id_donnee, $qui, $opt) {
     109        if (!isset($opt['id_form']) OR !$id_form = $opt['id_form']) return false;
    51110        // un admin dans le back office a toujours le droit d'inserer
    52111        if (($qui['statut'] == '0minirezo')) return true;
     
    58117        return true;
    59118}
    60 function autoriser_table_donnee_instituer($faire,$type,$id_donnee,$qui,$opt) {
     119function autoriser_table_donnee_creer_dist($faire, $type, $id_donnee, $qui, $opt) {
     120        return autoriser_form_donnee_creer($faire, $type, $id_donnee, $qui, $opt);
     121}
     122function autoriser_form_donnee_instituer_dist($faire,$type,$id_donnee,$qui,$opt) {
    61123        if (($qui['statut'] != '0minirezo')
    62124        OR !isset($opt['nouveau_statut'])
    63125        OR ($opt['nouveau_statut']=='prepa')) return false;
    64126        return true;
     127}
     128function autoriser_table_donnee_instituer_dist($faire,$type,$id_donnee,$qui,$opt) {
     129        return autoriser_form_donnee_instituer_dist($faire,$type,$id_donnee,$qui,$opt);
    65130}
    66131
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/forms.php

    r9896 r9909  
    7878                if (!include_spip('inc/autoriser'))
    7979                        include_spip('inc/autoriser_compat');
    80                 if (autoriser('supprimerdonnee','form',$id_form)){
     80                // on teste si autorisation en masse
     81                if (autoriser('supprimer','donnee',0,NULL,array('id_form'=>$id_form)))
    8182                        spip_query("UPDATE spip_forms_donnees SET statut='poubelle' WHERE id_form="._q($id_form));
    82                         /*$res = spip_query("SELECT id_donnee FROM spip_forms_donnees WHERE id_form="._q($id_form));
     83                // sinon, on teste une par une
     84                else {
     85                        $res = spip_query("SELECT id_donnee FROM spip_forms_donnees WHERE id_form="._q($id_form));
    8386                        while ($row = spip_fetch_array($res)){
    84                                 spip_query("DELETE FROM spip_forms_donnees_champs WHERE id_donnee="._q($row['id_donnee']));
    85                         }
    86                         spip_query("DELETE FROM spip_forms_donnees WHERE id_form="._q($id_form));*/
     87                                if (autoriser('supprimer','donnee',$row['id_donnee'],NULL,array('id_form'=>$id_form)))
     88                                        spip_query("UPDATE spip_forms_donnees SET statut='poubelle' WHERE id_donnee="._q($row['id_donnee']));
     89                        }
    8790                }
    8891        }
     
    572575                        // D'abord creer la reponse dans la base de donnees
    573576                        if ($ok) {
    574                                 if (autoriser('modifierdonnee', 'form', $id_form, NULL, array('id_donnee'=>$id_donnee))){
     577                                if (autoriser('modifier', 'donnee', $id_donnee, NULL, array('id_form'=>$id_form))){
    575578                                        spip_query("UPDATE spip_forms_donnees SET date=NOW(), ip="._q($GLOBALS['ip']).", url="._q($url).", confirmation="._q($confirmation).", cookie="._q($cookie)." ".
    576579                                                "WHERE id_donnee="._q($id_donnee));
    577580                                        spip_query("DELETE FROM spip_forms_donnees_champs WHERE id_donnee="._q($id_donnee));
    578                                 } elseif (autoriser('insererdonnee', 'form', $id_form, NULL, array('id_donnee'=>$id_donnee))){
     581                                } elseif (autoriser('creer', 'donnee', 0, NULL, array('id_form'=>$id_form))){
    579582                                        $rang = Forms_rang_prochain($id_form);
    580583                                        spip_query("INSERT INTO spip_forms_donnees (id_form, id_auteur, date, ip, url, confirmation,statut, cookie, rang) ".
     
    800803        foreach($types as $type_form)
    801804                $prefixi18n[$type_form] = forms_prefixi18n($type_form);
     805        if ($lieeliante=='liee')
     806                $type_autoriser = strncmp($type_source,'donnee',6)==0?'donnee':$type_source;
     807        else
     808                $type_autoriser = 'donnee';
    802809       
    803810        if (count($liste) OR $tranches) {
     
    818825                                        .implode(", ",$champs)."</a>";
    819826                                $redirect = ancre_url((_DIR_RESTREINT?"":_DIR_RESTREINT_ABS).self(),'tables');
    820                                 if ($lieeliante=='liee')
    821                                         $action = generer_action_auteur("forms_lier_donnees","$id,$type_source,retirer,$id_donnee",urlencode($redirect));
     827                                $action = "";
     828                                if ($lieeliante=='liee'){
     829                                        if (autoriser("delier_donnee",$type_autoriser,$id,NULL,array('id_donnee_liee'=>$id_donnee)))
     830                                                $action = generer_action_auteur("forms_lier_donnees","$id,$type_source,retirer,$id_donnee",urlencode($redirect));
     831                                }
    822832                                else
    823                                         $action = generer_action_auteur("forms_lier_donnees","$id_donnee,$type_lie,retirer,$id",urlencode($redirect));
     833                                        if (autoriser("delier_donnee",$type_autoriser,$id_donnee,NULL,array('id_form'=>$id_form,'id_donnee_liee'=>$id)))
     834                                                $action = generer_action_auteur("forms_lier_donnees","$id_donnee,$type_lie,retirer,$id",urlencode($redirect));
    824835                                $action = ancre_url($action,$bloc_id);
    825836                                $redirajax = generer_url_ecrire($script,$arg_ajax);
  • _plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/instituer_forms_donnee.php

    r9896 r9909  
    4747                if (
    4848                $s==$statut
    49                 OR autoriser('instituer',$type_form.'_donnee',$id_donnee,NULL,array('id_form'=>$id_form,'statut'=>$statut,'nouveau_statut'=>$s))
     49                OR autoriser('instituer','donnee',$id_donnee,NULL,array('id_form'=>$id_form,'statut'=>$statut,'nouveau_statut'=>$s))
    5050                )
    5151                        $res .= "<option"  .
     
    108108        foreach($statuts as $s){
    109109                $lib[$s] = _T("$p:texte_statut_$s");
    110                 if (autoriser('instituer',$type_form[$id_form].'_donnee',$id_donnee,NULL,array('id_form'=>$id_form,'statut'=>$statut,'nouveau_statut'=>$s)))
     110                if (autoriser('instituer','donnee',$id_donnee,NULL,array('id_form'=>$id_form,'statut'=>$statut,'nouveau_statut'=>$s)))
    111111                        $clip[$s] = $c++;
    112112                else
     
    126126                . "<span class='puce_article_popup' id='statutdecalforms_donnee$id'\nonmouseout=\"cacher('statutdecalforms_donnee$id');\" style='margin-left: -".((11*$clip[$statut])+1)."px;width:{$width}px'>";
    127127                foreach($statuts as $s)
    128                         if (autoriser('instituer',$type_form[$id_form].'_donnee',$id_donnee,NULL,array('id_form'=>$id_form,'statut'=>$statut,'nouveau_statut'=>$s)))
     128                        if (autoriser('instituer','donnee',$id_donnee,NULL,array('id_form'=>$id_form,'statut'=>$statut,'nouveau_statut'=>$s)))
    129129                        $res .= afficher_script_statut($id, 'forms_donnee', -((11*$clip[$s])+1), $puce[$s], $s, $lib[$s], $action);
    130130                $res .= "</span>";
Note: See TracChangeset for help on using the changeset viewer.