source: spip-zone/_plugins_/fabrique/trunk/fabrique/prefixe_autorisations.php.html @ 100899

Last change on this file since 100899 was 100899, checked in by kent1@…, 5 years ago

Se rapprocher des specs des PSR pour SPIP

File size: 9.4 KB
Line 
1#PHP
2[(#INCLURE{fond=fabrique/entetes/php,env,
3        description=Définit les autorisations du plugin #ENV{paquet/nom},
4        package=Autorisations})]
5
6<BOUCLE_si_exemples(CONDITION){si #EXEMPLES}>
7/*
8 * Un fichier d'autorisations permet de regrouper
9 * les fonctions d'autorisations de votre plugin
10 */
11</BOUCLE_si_exemples>
12/**
13 * Fonction d'appel pour le pipeline
14 * @pipeline autoriser */
15function [(#PREFIXE)]_autoriser() {
16}
17
18<BOUCLE_si_exemples2(CONDITION){si #EXEMPLES}>
19/* Exemple
20function autoriser_[(#PREFIXE)]_configurer_dist($faire, $type, $id, $qui, $opt) {
21        // type est un objet (la plupart du temps) ou une chose.
22        // autoriser('configurer', '_[(#PREFIXE)]') => $type = '[(#PREFIXE)]'
23        // au choix :
24        return autoriser('webmestre', $type, $id, $qui, $opt); // seulement les webmestres
25        return autoriser('configurer', '', $id, $qui, $opt); // seulement les administrateurs complets
26        return $qui['statut'] == '0minirezo'; // seulement les administrateurs (même les restreints)
27        // ...
28}
29*/
30</BOUCLE_si_exemples2>
31<BOUCLE_objets(DATA){source tableau,#OBJETS}>[
32(#SET{type,#TYPE|fabrique_type_autorisation})][
33(#SET{objet,#OBJET|fabrique_type_autorisation})
34]// -----------------
35// Objet [(#OBJET)]
36
37[
38/**
39 * Autorisation de voir un élément de menu \(#GET{objet}\)
40 *
41 * @param  string $faire Action demandée
42 * @param  string $type  Type d'objet sur lequel appliquer l'action
43 * @param  int    $id    Identifiant de l'objet
44 * @param  array  $qui   Description de l'auteur demandant l'autorisation
45 * @param  array  $opt   Options de cette autorisation
46 * @return bool          true s'il a le droit, false sinon
47**/
48function autoriser_#GET{objet}_menu_dist($faire, $type, $id, $qui, $opt) {
49        return true;
50}(#VAL{menu_edition}|in_any{#VALEUR{boutons}})]
51[
52
53/**
54 * Autorisation de voir le bouton d'accès rapide de création \(#GET{type}\)
55 *
56 * @param  string $faire Action demandée
57 * @param  string $type  Type d'objet sur lequel appliquer l'action
58 * @param  int    $id    Identifiant de l'objet
59 * @param  array  $qui   Description de l'auteur demandant l'autorisation
60 * @param  array  $opt   Options de cette autorisation
61 * @return bool          true s'il a le droit, false sinon
62**/
63function autoriser_#GET{type}creer_menu_dist($faire, $type, $id, $qui, $opt) {
64        return autoriser('creer', ['(#TYPE)'], '', $qui, $opt);
65}(#VAL{outils_rapides}|in_any{#VALEUR{boutons}})]
66
67/**
68 * Autorisation de créer \(#GET{type}\)
69 *[(#SET{creer,[(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_creer, #PREFIXE, #VALEUR})]})]
70 * @param  string $faire Action demandée
71 * @param  string $type  Type d'objet sur lequel appliquer l'action
72 * @param  int    $id    Identifiant de l'objet
73 * @param  array  $qui   Description de l'auteur demandant l'autorisation
74 * @param  array  $opt   Options de cette autorisation
75 * @return bool          true s'il a le droit, false sinon
76**/
77function autoriser_#GET{type}_creer_dist($faire, $type, $id, $qui, $opt) {[
78        return \([(#GET{creer})] and sql_countsel('spip_rubriques')>0\);(#VALEUR|champ_present{id_rubrique}|oui)][
79        return #GET{creer};(#VALEUR|champ_present{id_rubrique}|non)]
80}
81
82/**
83 * Autorisation de voir \(#GET{type}\)
84 *
85 * @param  string $faire Action demandée
86 * @param  string $type  Type d'objet sur lequel appliquer l'action
87 * @param  int    $id    Identifiant de l'objet
88 * @param  array  $qui   Description de l'auteur demandant l'autorisation
89 * @param  array  $opt   Options de cette autorisation
90 * @return bool          true s'il a le droit, false sinon
91**/
92function autoriser_#GET{type}_voir_dist($faire, $type, $id, $qui, $opt) {
93        return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_voir, #PREFIXE, #VALEUR})];
94}
95
96/**
97 * Autorisation de modifier \(#GET{type}\)
98 *
99 * @param  string $faire Action demandée
100 * @param  string $type  Type d'objet sur lequel appliquer l'action
101 * @param  int    $id    Identifiant de l'objet
102 * @param  array  $qui   Description de l'auteur demandant l'autorisation
103 * @param  array  $opt   Options de cette autorisation
104 * @return bool          true s'il a le droit, false sinon
105**/
106function autoriser_#GET{type}_modifier_dist($faire, $type, $id, $qui, $opt) {
107        return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_modifier, #PREFIXE, #VALEUR})];
108}
109
110/**
111 * Autorisation de supprimer \(#GET{type}\)
112 *
113 * @param  string $faire Action demandée
114 * @param  string $type  Type d'objet sur lequel appliquer l'action
115 * @param  int    $id    Identifiant de l'objet
116 * @param  array  $qui   Description de l'auteur demandant l'autorisation
117 * @param  array  $opt   Options de cette autorisation
118 * @return bool          true s'il a le droit, false sinon
119**/
120function autoriser_#GET{type}_supprimer_dist($faire, $type, $id, $qui, $opt) {
121        return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_supprimer, #PREFIXE, #VALEUR})];
122}
123<BOUCLE_creer_objet_dans_rubrique(CONDITION){si (#VAL{vue_rubrique}|in_any{#VALEUR{rubriques}})}>
124/**
125 * Autorisation de créer l'élément \(#GET{type}\) dans une rubrique
126 *
127 * @param  string $faire Action demandée
128 * @param  string $type  Type d'objet sur lequel appliquer l'action
129 * @param  int    $id    Identifiant de l'objet
130 * @param  array  $qui   Description de l'auteur demandant l'autorisation
131 * @param  array  $opt   Options de cette autorisation
132 * @return bool          true s'il a le droit, false sinon
133**/
134function autoriser_rubrique_creer#GET{type}dans_dist($faire, $type, $id, $qui, $opt) {
135        return ($id and autoriser('voir', 'rubrique', $id) and autoriser('creer', '[(#TYPE)]', $id));
136}</BOUCLE_creer_objet_dans_rubrique>
137<BOUCLE_creer_objet_dans_autre_parent_direct(CONDITION){si (#VALEUR|option_presente{liaison_directe})}>
138/**
139 * Autorisation de créer l'élément \(#GET{type}\) dans un [(#VALEUR{parent/objet})]
140 *
141 * @param  string $faire Action demandée
142 * @param  string $type  Type d'objet sur lequel appliquer l'action
143 * @param  int    $id    Identifiant de l'objet
144 * @param  array  $qui   Description de l'auteur demandant l'autorisation
145 * @param  array  $opt   Options de cette autorisation
146 * @return bool          true s'il a le droit, false sinon
147**/
148function autoriser_[(#VALEUR{parent/type}|fabrique_type_autorisation)]_creer#GET{type}dans_dist($faire, $type, $id, $qui, $opt) {
149        return ($id and autoriser('voir', '[(#VALEUR{parent/objet})]', $id) and autoriser('creer', '[(#TYPE)]'));
150}</BOUCLE_creer_objet_dans_autre_parent_direct>
151<BOUCLE_associer_objets(CONDITION){si #TABLE_LIENS}>
152/**
153 * Autorisation de lier/délier l'élément \(#GET{objet}\)
154 *
155 * @param  string $faire Action demandée
156 * @param  string $type  Type d'objet sur lequel appliquer l'action
157 * @param  int    $id    Identifiant de l'objet
158 * @param  array  $qui   Description de l'auteur demandant l'autorisation
159 * @param  array  $opt   Options de cette autorisation
160 * @return bool          true s'il a le droit, false sinon
161**/
162function autoriser_associer#GET{objet}_dist($faire, $type, $id, $qui, $opt) {
163        return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{associerobjet, #OBJET, #VALEUR|champ_present{id_rubrique}})];
164}</BOUCLE_associer_objets>[(#REM)
165]</BOUCLE_objets>[(#REM)
166]<BOUCLE_aide_auteur(CONDITION){si #OBJETS|objets_autorisations_presentes{#LISTE{auteur_objet,auteur_objet_statut}}}>
167/**
168 * Lister les auteurs liés à un objet
169 *
170 * @param int $objet Type de l'objet
171 * @param int $id_objet Identifiant de l'objet
172 * @return array        Liste des id_auteur trouvés
173 */
174function [(#PREFIXE)]_auteurs_objet($objet, $id_objet) {
175        $auteurs = sql_allfetsel('id_auteur', 'spip_auteurs_liens', array('objet = ' . sql_quote($objet), 'id_objet = ' . intval($id_objet)));
176        if (is_array($auteurs)) {
177                return array_map('reset', $auteurs);
178        }
179        return array();
180}
181</BOUCLE_aide_auteur>[(#REM)
182]<BOUCLE_aide_auteur_rubrique(CONDITION)
183        {si #OBJETS|objets_autorisations_presentes{#LISTE{auteur_objet,auteur_objet_statut,admin_restreint_objet}}}
184        {si #OBJETS|objets_champ_present{id_rubrique}}>
185/**
186 * Tester si on est administrateur complet ou admin restreint sur cette rubrique
187 *
188 * @param  string $objet    Type d'objet
189 * @param  int    $id_objet Identifiant de l'objet
190 * @param  array  $qui      Description de l'auteur demandant l'autorisation
191 * @return bool             true s'il a le droit, false sinon
192 **/
193function [(#PREFIXE)]_autoriser_admins($objet, $id_objet, $qui) {
194        $id = sql_getfetsel('id_rubrique', table_objet_sql($objet), id_table_objet($objet) . ' = ' . intval($id_objet));
195        return ($qui['statut'] == '0minirezo') and (!$qui['restreint'] or !$id or in_array($id, $qui['restreint']));
196}
197</BOUCLE_aide_auteur_rubrique>[(#REM)
198]<BOUCLE_aide_objet_statut(CONDITION)
199        {si #OBJETS|objets_autorisation_presente{auteur_objet_statut}}
200        {si #OBJETS|objets_champ_present{statut}}>
201/**
202 * Tester si le statut de l'objet autorise des changements, en fonction du statut de l'auteur.
203 *
204 * @param  string $objet    Type d'objet
205 * @param  int    $id_objet Identifiant de l'objet
206 * @param  array  $qui      Description de l'auteur demandant l'autorisation
207 * @param  array  $opt      Options de l'autorisation
208 * @return bool             true s'il a le droit, false sinon
209 **/
210function [(#PREFIXE)]_autoriser_statuts($objet, $id_objet, $qui, $opt) {
211        $statut = sql_getfetsel('statut', table_objet_sql($objet), id_table_objet($objet) . ' = ' . intval($id_objet));
212        return (!isset($opt['statut']) or $opt['statut'] !== 'publie')
213                and in_array($qui['statut'], array('0minirezo', '1comite'))
214                and in_array($statut, array('prop', 'prepa', 'poubelle'));
215}
216</BOUCLE_aide_objet_statut>[(#REM)
217]
Note: See TracBrowser for help on using the repository browser.