source: spip-zone/_plugins_/_stable_/forms/forms_et_tables_1_9_1/inc/autoriser_compat.php @ 7914

Last change on this file since 7914 was 7914, checked in by cedric@…, 13 years ago

faire une demande d'ident si auteur_session pas definie (cas des appels action sur ajax en 1.9.1)

File size: 7.2 KB
Line 
1<?php
2
3/***************************************************************************\
4 *  SPIP, Systeme de publication pour l'internet                           *
5 *                                                                         *
6 *  Copyright (c) 2001-2006                                                *
7 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8 *                                                                         *
9 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11\***************************************************************************/
12
13if (!defined("_ECRIRE_INC_VERSION")) return;
14
15
16define ('_DEBUG_AUTORISER', false);
17
18// surcharge possible de autoriser(), sinon autoriser_dist()
19// http://doc.spip.org/@autoriser
20if (!function_exists('autoriser')) {
21// http://doc.spip.org/@autoriser
22        function autoriser() {
23                $args = func_get_args(); 
24                return call_user_func_array('autoriser_dist', $args);
25        }
26}
27
28
29// API pour une fonction generique d'autorisation :
30// $qui est : vide (on prend alors auteur_session)
31//            un id_auteur (on regarde dans la base)
32//            un tableau auteur complet, y compris [restreint]
33// $faire est une action ('modifier', 'publier'...)
34// $type est un type d'objet ou nom de table ('article')
35// $id est l'id de l'objet sur lequel on veut agir
36// $opt (inutilise pour le moment) = options sous forme de tableau associatif
37// (par exemple pour preciser si l'autorisation concerne tel ou tel champ)
38//
39// Seul le premier argument est obligatoire
40//
41// http://doc.spip.org/@autoriser_dist
42function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
43        static $restreint = array();
44
45        // Qui ? auteur_session ?
46        if (!is_array($qui)) {
47                if (is_int($qui)) {
48                        $qui = spip_fetch_array(spip_query(
49                        "SELECT * FROM spip_auteurs WHERE id_auteur=".$qui));
50                } else {
51                        if (!is_array($GLOBALS['auteur_session'])){
52                                $var_auth = charger_fonction('auth', 'inc');
53                                $var_auth = $var_auth();
54                        }
55                        $qui = $GLOBALS['auteur_session'];
56                }
57        }
58
59        // Admins restreints, les verifier ici (pas generique mais...)
60        // Par convention $restreint est un array des rubriques autorisees
61        // (y compris leurs sous-rubriques), ou 0 si admin complet
62        if (is_array($qui)
63        AND $qui['statut'] == '0minirezo'
64        AND !isset($qui['restreint'])) {
65                if (!isset($restreint[$qui['id_auteur']])) {
66                        include_spip('inc/auth'); # pour auth_rubrique
67                        $restreint[$qui['id_auteur']] = auth_rubrique($qui['id_auteur'], $qui['statut']);
68                }
69                $qui['restreint'] = $restreint[$qui['id_auteur']];
70        }
71
72        if (_DEBUG_AUTORISER) spip_log("autoriser $faire $type $id ?");
73
74        // Chercher une fonction d'autorisation explicite
75        if (
76        // 1. Sous la forme "autoriser_type_faire"
77                (
78                $type
79                AND $f = 'autoriser_'.$type.'_'.$faire
80                AND (function_exists($f) OR function_exists($f.='_dist'))
81                )
82
83        // 2. Sous la forme "autoriser_type"
84        // ne pas tester si $type est vide
85        OR (
86                $type
87                AND $f = 'autoriser_'.$type
88                AND (function_exists($f) OR function_exists($f.='_dist'))
89        )
90
91        // 3. Sous la forme "autoriser_faire"
92        OR (
93                $f = 'autoriser_'.$faire
94                AND (function_exists($f) OR function_exists($f.='_dist'))
95        )
96
97        // 4. Sinon autorisation generique
98        OR (
99                $f = 'autoriser_defaut'
100                AND (function_exists($f) OR function_exists($f.='_dist'))
101        )
102
103        )
104                $a = $f($faire,$type,intval($id),$qui,$opt);
105
106        if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id): ".($a?'OK':'niet'));
107
108        return $a;
109}
110
111// Autorisation par defaut : les admins complets OK, les autres non
112// http://doc.spip.org/@autoriser_defaut_dist
113function autoriser_defaut_dist($faire, $type, $id, $qui, $opt) {
114        return
115                $qui['statut'] == '0minirezo'
116                AND !$qui['restreint'];
117}
118
119// Autoriser a publier dans la rubrique $id
120// http://doc.spip.org/@autoriser_rubrique_publierdans_dist
121function autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt) {
122        return
123                ($qui['statut'] == '0minirezo')
124                AND (!$qui['restreint']
125                        ? true
126                        : in_array($id, $qui['restreint'])
127                );
128}
129
130// Autoriser a modifier la rubrique $id
131// = publierdans rubrique $id
132// http://doc.spip.org/@autoriser_rubrique_modifier_dist
133function autoriser_rubrique_modifier_dist($faire, $type, $id, $qui, $opt) {
134        return
135                autoriser('publierdans', 'rubrique', $id, $qui, $opt);
136}
137
138// Autoriser a modifier la breve $id
139// = admins & redac si la breve n'est pas publiee
140// = admins de rubrique parente si publiee
141// http://doc.spip.org/@autoriser_breve_modifier_dist
142function autoriser_breve_modifier_dist($faire, $type, $id, $qui, $opt) {
143        $s = spip_query(
144        "SELECT id_rubrique,statut FROM spip_breves WHERE id_breve="._q($id));
145        $r = spip_fetch_array($s);
146        return
147                ($r['statut'] == 'publie')
148                        ? autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
149                        : in_array($qui['statut'], array('0minirezo', '1comite'));
150}
151
152// Autoriser a modifier l'article $id
153// = publierdans rubrique parente
154// = ou statut 'prop,prepa' et $qui est auteur
155// http://doc.spip.org/@autoriser_article_modifier_dist
156function autoriser_article_modifier_dist($faire, $type, $id, $qui, $opt) {
157        $s = spip_query(
158        "SELECT id_rubrique,statut FROM spip_articles WHERE id_article="._q($id));
159        $r = spip_fetch_array($s);
160        return
161                autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt)
162                OR (
163                        in_array($qui['statut'], array('0minirezo', '1comite'))
164                        AND in_array($r['statut'], array('prop','prepa', 'poubelle'))
165                        AND spip_num_rows(auteurs_article($id, "id_auteur=".$qui['id_auteur']))
166                );
167}
168
169// Lire les stats ?
170// = tous les admins
171// http://doc.spip.org/@autoriser_voirstats_dist
172function autoriser_voirstats_dist($faire, $type, $id, $qui, $opt) {
173        return
174                $qui['statut'] == '0minirezo';
175}
176
177
178// Voir un objet
179// http://doc.spip.org/@autoriser_voir_dist
180function autoriser_voir_dist($faire, $type, $id, $qui, $opt) {
181        if (
182                ($qui['statut'] == '0minirezo')
183                OR ($type != 'article')
184        )
185                return true;
186
187        // un article 'prepa' ou 'poubelle' dont on n'est pas auteur : interdit
188        $s = spip_query(
189        "SELECT statut FROM spip_articles WHERE id_article="._q($id));
190        $r = spip_fetch_array($s);
191        return
192                in_array($r['statut'], array('prop', 'publie'))
193                OR spip_num_rows(auteurs_article($id, "id_auteur=".$qui['id_auteur']));
194}
195
196// Voir les revisions ?
197// = voir l'objet
198// http://doc.spip.org/@autoriser_voirrevisions_dist
199function autoriser_voirrevisions_dist($faire, $type, $id, $qui, $opt) {
200        return
201                autoriser('voir', $type, $id, $qui, $opt);
202}
203
204// Moderer le forum ?
205// = modifier l'objet correspondant (si forum attache a un objet)
206// = droits par defaut sinon (admin complet pour moderation complete)
207// http://doc.spip.org/@autoriser_modererforum_dist
208function autoriser_modererforum_dist($faire, $type, $id, $qui, $opt) {
209        return
210                autoriser('modifier', $type, $id, $qui, $opt);
211}
212
213// Modifier un forum ?
214// = jamais !
215// http://doc.spip.org/@autoriser_modifier_forum_dist
216function autoriser_modifier_forum_dist($faire, $type, $id, $qui, $opt) {
217        return
218                false;
219}
220
221
222// Moderer la petition ?
223// = modifier l'article correspondant
224// = droits par defaut sinon (admin complet pour moderation de tout)
225// http://doc.spip.org/@autoriser_moderer_petition_dist
226function autoriser_moderer_petition_dist($faire, $type, $id, $qui, $opt) {
227        return
228                autoriser('modifier', $type, $id, $qui, $opt);
229}
230
231?>
Note: See TracBrowser for help on using the repository browser.