No Branch/Tag Specified
issue_3432
issue_5690
4.2
master
new_cache
4.1
new_path
cut_boostrap
admin_plugin_affiche_milieu
issue_4845_next
debug_ecrire_fichier
refactor_idiomes
issue_5095
issue_5667
move-images-to-plugin-images
dev/issue_5560_dispositions_prive
4.0
3.2
dev/issue_4626_menu_squelettes
fix_issue_5454
issue_5427_bis
coquille_doc
issue_5344
dev/hasard_fixe
issue_4836
fix_modifier_login
dev/instituer_ergo
dev_infos_image
fix/valider_url_distante
issue_4946
3.1
boutons-danger
issue_4717
dev-sortable
issue_4705
dev/autoloader
issue_4678
issue_4101
3.0
2.1
2.0
1.9.2
1.9.1
1.8
v4.2.5
v4.1.12
v4.1.11
v4.2.4
v4.2.3
v4.2.2
v4.1.9
v4.0.11
v3.2.19
v4.2.1
v4.1.8
v4.0.10
v3.2.18
v4.2.0
v4.2.0-alpha2
v4.2.0-alpha
v4.1.7
v4.1.6
v4.0.9
v3.2.17
v4.1.5
v4.1.4
v3.2.16
v4.0.8
v4.1.3
v3.2.15
v4.0.7
v4.1.2
v4.0.6
v4.1.1
v4.1.0
v4.1.0-rc
v4.0.5
v3.2.14
v4.1.0-beta
v4.1.0-alpha
v3.2.13
v4.0.4
v4.0.3
v4.0.2
v3.2.12
v4.0.1
v4.0.0
v4.0.0-beta
v4.0.0-alpha
v3.2.11
v3.2.10
v3.1.15
v3.2.9
v3.1.14
v3.1.13
v3.2.8
v4.1.10
v3.2.7
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0-beta.3
v3.2.0-beta.2
v3.2.0-beta
v3.2.0-alpha.1
v3.2.0
v3.2-alpha.1
v3.1.9
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.12
v3.1.11
v3.1.10
v3.1.1
v3.1.0-rc.3
v3.1.0-rc.2
v3.1.0-rc
v3.1.0-beta
v3.1.0-alpha
v3.1.0
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.28
v3.0.27
v3.0.26
v3.0.25
v3.0.24
v3.0.23
v3.0.22
v3.0.21
v3.0.20
v3.0.2
v3.0.19
v3.0.18
v3.0.17
v3.0.16
v3.0.15
v3.0.14
v3.0.13
v3.0.12
v3.0.11
v3.0.10
v3.0.1
v3.0.0-rc
v3.0.0-beta.2
v3.0.0-beta
v3.0.0-alpha.1
v3.0.0
v2.1.9
v2.1.8
v2.1.7
v2.1.6
v2.1.5
v2.1.4
v2.1.30
v2.1.3
v2.1.29
v2.1.28
v2.1.27
v2.1.26
v2.1.25
v2.1.24
v2.1.23
v2.1.22
v2.1.21
v2.1.20
v2.1.2
v2.1.19
v2.1.18
v2.1.17
v2.1.16
v2.1.15
v2.1.14
v2.1.13
v2.1.12
v2.1.11
v2.1.10
v2.1.1
v2.1.0
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.3
v2.0.26
v2.0.25
v2.0.24
v2.0.23
v2.0.22
v2.0.21
v2.0.20
v2.0.2
v2.0.19
v2.0.18
v2.0.17
v2.0.16
v2.0.15
v2.0.14
v2.0.13
v2.0.12
v2.0.11
v2.0.10
v2.0.1
v2.0.0
v1.9.2+p
v1.9.2+o
v1.9.2+n
v1.9.2+m
v1.9.2+k
v1.9.2+j
v1.9.2+i
v1.9.2+h
v1.9.2+g
v1.9.2+f
v1.9.1+i
v1.8.3+b
Labels
Clear labels
Amélioration, nouvelle fonctionnalité
Ca ne fonctionne pas
Ce ticket est un doublon
En cours de traitement par le bureau
Ticket invalide
Ignoré, c'est comme Ca...
Apply labels
accessibilité
amélioration
Amélioration, nouvelle fonctionnalité
APIs
authentification
base de données
bug
Ca ne fonctionne pas
code généré
compilo
css
divers
documentation
doublon
Ce ticket est un doublon
En cours
En cours de traitement par le bureau
ergonomie
espace privé
filtres et balises
formulaires
Inscription
installation
invalide
Ticket invalide
javascript
langues
LDAP
plugin
PostgreSQL
refusé
Ignoré, c'est comme Ca...
sécurité
traduction
à confirmer
No Label
accessibilité
amélioration
APIs
authentification
base de données
bug
code généré
compilo
css
divers
documentation
doublon
En cours
ergonomie
espace privé
filtres et balises
formulaires
Inscription
installation
invalide
javascript
langues
LDAP
plugin
PostgreSQL
refusé
sécurité
traduction
à confirmer
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Set Project
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
4 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
No dependencies set.
Reference: spip/spip#2415
Reference in New Issue
There is no content yet.
Delete Branch '%!s(<nil>)'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
Les autorisations SPIP 3.0 ont changé la donne depuis la rev #16301 (http://core.spip.org/projects/spip/repository/revisions/16301) qui passe le
$type
par la moulinette deobjet_type()
, je ne sais pour quelle raison...Du coup
autoriser('configurer', 'plugins')
amène à chercher une fonctionautoriser_plugin_configurer()
qui n'existe pas puisque le pluriel de$type
est retiré...Par ailleurs, est-ce que supprimer l'underscore est vraiment nécessaire ?
autoriser('configurer', 'mes_objets')
va rechercher la fonctionautoriser_mesobjet_configurer()
, ce qui me parait évidemment totalement absurde.Mes tests sont-ils partagés sous SPIP 3.0 ?
L'API des autorisations était déjà fragile amha, cette évolution est-elle pérenne ?
la raison première est que l'api autoriser s'applique aux objets :
autoriser('faire','type',$id)
en normalisant le type via objet_type on assure que toutes les fonctions génériques retomberont bien sur la bonne autorisation (voir les cas typiques des site/syndic forum/forums groupe_mot/groupes_mot/...).
De ce point de vue l'utilisation de objet_type est un bénéfice.
L'application de la fonction peut en effet poser problème dans le cas des autorisation 'détournée' qui ne s'appliquent pas à des objets (menu, configurer, et je ne sais pas si il y en a d'autre).
Pour menu on a deja une derogation (http://core.spip.org/projects/spip/repository/entry/spip/ecrire/inc/autoriser.php#L81), on peut envisager de l'appliquer aussi à configurer si c'est le seul autre cas ?
La suppression des _ dans le type permet également d'avoir des noms de fonction autoriser() plus lisible.
cedric, comme +je l'écris+ dans le texte, il y a :
autoriser('configurer', 'plugins')
, d'où le caractère urgent de cette anomalie.Dans
autoriser('faire','type',$id)
, le 'type' est comme ça assez flou et peut servir à tout, pas seulement à des objets en base. Il sert déjà à tout de toute façon, et c'est parfait ainsi amha, ça 'universalise' l'API. Le 'type' sert également à imbriquer les niveaux d'autorisations suivant une certaine imbrication qui n'est pas mal, même si c'est loin d'être idéal pour une utilisation plus poussée.A part ça, les underscores ne m'ont jamais posé de problème pour lire le nom d'une fonction.
Cette suppression du "s" m'a toujours paru, du point de vue de l'internationnalisation de SPIP et des pluriels irréguliers, un choix choquant. J'espérais que la table des alias allait tout résoudre, mais je me demande si on n'est pas encore au début du chemin...
Conserver les underscores créé une ambiguité potentielle sur le nom de la fonction et l'autorisation à laquelle elle s'applique. En les supprimant en évite ce risque.
Pour autoriser('configurer','plugins') on mappe en effet maintenant sur la fonction autoriser_plugin_configurer(). Il n'y a pas de trou de sécu côté core puisque seule autoriser_configurer() est implémentée.
Le type se refere bien a des objets en règle génerale. Et je demandais justement si les cas dérogeant étaient limités a menu/onglet/configurer ou si tu en as d'autres exemples ?
Mais il suffit de faire une recherche sur la zone et de lister toutes les fonctions autoriser_toto() ou tous les appels autoriser() ou autres balises #AUTORISER, pour s'apercevoir que beaucoup de plugins vont voir leurs autorisations non prises en compte sous SPIP 3 à cause de ce pluriel très bizarrement "singuliérisé".
Ce bug étant souvent silencieux, il me semble incroyable de s'engager désormais sur cette voie.
Depuis quand les autorisations sont-elle limitées aux objets ? Personnellement, je n'étais pas au courant, tout comme beaucoup d'autres auteurs de plugin.
Cette API prometteuse au départ est en train de s'étioler avec ce choix de rechercher des fonctions mises au singulier (l'underscore, à la limite, je pourrais m'y faire).
Je ne voudrais pas être lourd, mais SPIP a bien besoin de plus de clarté. Allez donc expliquer aux codeurs que autoriser('configurer','plugins') qui figure partout dans SPIP et sa galaxie, va chercher une fonction autoriser_plugin_configurer() !
Allez, je liste 2-3 choses vite fait :
(ah oui c'est vrai, voici une exception...)
(à la place de autoriser_revisions_voir_dist ?)
(et non function autoriser_statistiquesvisites_menu_dist ?)
Je suis peut-être bête, mais là, le bon sens me dit que SPIP autorise d'une bien singulière manière !
Bien le bonjour
Je n'avais pas d'eau à apporter au moulin, mais suite à discussion, je viens de me rappeler d'un cas que j'ai.
La gestion des autorisations de page depuis la squelette. Un exemple donné dans la discussion était :
#autoriser{voir, page-organigrammes}
Des s et des tirets la joie :)
je doute que autoriser{voir, page-organigrammes} ait jamais marché, puisque cela chercherai la fonction "autoriser_page-organigrammes_voir qui ne peut pas exister :)
Cédric, ce que j'ai écrit était un exemple pour comprendre la situation possible de Camille. Effectivement, si tu as un squelettes
?page=photos
, tu peux vouloir mettre dedans un#AUTORISER{voir,photos}
...Je suis aussi perplexe par ces changements, certes utiles, mais qui donnent de nouveaux cheveux à retordre. Avant : a
utoriser(A, B)
donnait une fonctionautoriser_B_A_dist()
qui paraissait logique. Certes, le problème d'un souligné _ dans A ou B était source de bug potentielle. Cette correction est claire et logique à expliquer.Mais appliquer
objet_type()
systématiquement sur B me fait vraiment bizarre. Enfin c'est bizarre surtout si l'objet n'existe pas.regarde le code en v2.1 :
il y avait déjà une dérogation et un redressement pour le cas particulier des groupes de mots.
Dans le dev de la 3.0 il est apparu que l'objet 'site' necessitait aussi une derogation. D'ou la generalisation.
ton exemple AUTORISER{voir,photos} n'est pas bon non plus, car si jamais tu installe un plugin qui crée un objet photo tu vas melanger les autorisation de l'objet avec celles de ta page.
Donc il faudrait a minima un verbe discriminant 'voirpage'.
Mais cela veut dire qu'on a implicitement deux grandes familles d'autorisation : une sur les objets et une sur ... le reste (qui représente une proportion faible des appels a autoriser)
Comment les gere-t-on, les distingue-t-on ?
Peut être faut-il convenir d'un prefixe dans l'action ou le type qui permet de distinguer toutes les autorisations qui ne concernent pas les objets editoriaux ?
En tout état de cause le status quo par rapport à la v2.1 que demande Patrice ne me parait pas une bonne idée.
Cédric proposait sur IRC en en discutant l'autre jour qu'on pourrait définir un caractère de début de chaîne qui voudrait dire : ceci n'est pas un objet (en gros). Par exemple via :
autoriser('triturer','
photos') ou #AUTORISER{triturer,
photos}Peut être à voir avec _ ou : ?
autoriser('triturer',':photos') ou #AUTORISER{triturer,:photos}
autoriser('triturer','_photos') ou #AUTORISER{triturer,_photos}
Est-ce que cette solution est un bon compromis ?
À ce propos, les noms d'autorisations des statistiques (http://zone.spip.org/trac/spip-zone/browser/core/plugins/statistiques/stats_autoriser.php) ne sont pas correctes actuellement en ?rev=56562
Un exemple :
autoriser_statistiques_referers_menu_dist
doit devenirDonc au final :
autoriser_statsreferer_onglet_dist
Tout ceci ne me fait pas changer d'avis, ce n'est pas le nom des fonctions qu'il faut changer mais le traitement sur $type. Les règles de cette API marchent sur le tête amha, c'est bien trop complexe et source assurée de bugs. Il faudrait vraiment un fonctionnement simple, les autorisations c'est du sérieux.
L'idéal serait de pouvoir jongler facilement entre : autoriser($faire, $type='', $id=0, etc.) et autoriser($faire, $quoi='', $id=0, etc.). Et il y a beaucoup d'appels au sein du code de SPIP à cette API avec un $type qui n'est pas un objet !!
Afin d'éclaircir le code de SPIP, la fonction autoriser($faire, $quoi='', $id=0, etc.) se limiterait à faire un simple routage, et la fonction dédiée aux objets en base pourrait prendre un nouveau nom (singulier !) : autoriser_objet($faire, $quoi='', $id=0, etc.). De même pour autoriser_quoi($faire, $quoi='', $id=0, etc.). A voir si ces fonctions doivent être documentées, peut-être surchargeables, et directement utilisables dans les squelettes.
L'astuce de Marcimat avec le ` n'est pas géniale, mais pourrait faire l'affaire.
Autre piste dans le même ordre : si $id n'est pas un chiffre ou s'il est négatif (-1 par exemple), on peut éventuellement considérer que le $type (alias le $quoi) n'est pas un objet stocké en base et qu'il faut l'utiliser tel quel.
Enfin, quitte à révolutionner la chose, on pourrait :
Bon... tiens, je vois dans mon commentaire que là aussi http://zone.spip.org/trac/spip-zone/browser/plugins/champs_extras/core/trunk/inc/cextras_autoriser.php#L94 (en 50696) je vais avoir un soucis par rapport à ce que je demandais de faire en SPIP 2.
j'appelle :
autoriser('voirextra','auteur_prenom', $id_auteur);
«prenom» étant le nom du champ extra qui a été créé sur la table auteur.
S'il a un S ou non, ça va être pareil.
il me semble que ce modele d'appel pour les champs extra est en lui-même peu robuste puisque tu ne peux pas faire la dire si ('voirextra','articles_syndic_oui') est le champ 'oui' sur la table 'articles_syndic' ou le champ 'syndic_oui' sur la table 'articles'.
Tu as donc toutes les chances d'une collision un jour ou l'autre.
Je préconiserai plutot le modèle d'appel
qui lève toute ambiguité possible et tout risque de collision.
Et cela montre bien que mettre n'importe quoi dans le $type de autoriser augmente les risques d'indetermination.
oui, je suis d'accord avec toi, d'ailleurs c'est le commentaire de la fonction qui n'était plus à jour car je sépare l'objet de la colonne par le caractère 0 maintenant article0prenom. Mais il y a certainement mieux oui.
ça donnerait quoi au bout du compte ?
autoriser('voirextra_prenom','auteur',$id_auteur)
-> autoriser_auteur_voirextra_prenom il semblerait. Ce qui me parait bien d'ailleurs (pour champs extras) :)
Bon, pour Champs Extras, c'est réglé par http://zone.spip.org/trac/spip-zone/changeset/56666
r18896 implémente le '_' en premier caractère du $quoi pour distinguer que ce ne sont pas des $type. Les _ sont ensuite tous retirés pour construire le nom de la fonction.
Bonjour,
Ce commit est incomplet, n'est-ce pas ?
Avec cette décision, il va falloir modifier bien des autorisations de SPIP, j'imagine que c'est prévu...
A la louche :
autoriser('detruire','statistiques')
autoriser('exporter','bookmarks')
autoriser('importer','bookmarks')
#AUTORISER{configurer,revisions}
#AUTORISER{configurer,plugins}
#AUTORISER{configurer,interactions}
etc., etc.
Et peut-être :
#AUTORISER{creer,groupemots}
Pat
Appliqué par commit r18940.
Statut changé à Fermé