API éditer objet / fonction objet_inserer : associer l'auteur *avant* l'appel du pipeline post_insertion
#3238
Closed
opened 9 years ago by tcharlss
·
5 comments
No Branch/Tag Specified
1.8
1.9.1
1.9.2
2.0
2.1
3.0
3.1
3.2
4.0
4.1
4.2
boutons-danger
coquille_doc
debug_ecrire_fichier
dev-sortable
dev/autoloader
dev/hasard_fixe
dev/instituer_ergo
dev/issue_4626_menu_squelettes
dev/issue_5447_exporter_csv
dev_infos_image
fix/valider_url_distante
fix_issue_5454
fix_modifier_login
issue_4101
issue_4678
issue_4705
issue_4717
issue_4836
issue_4946
issue_5258
issue_5344
issue_5427_bis
issue_5483_find_script_jquery
issue_5487_info_maj
master
v1.8.3+b
v1.9.1+i
v1.9.2+f
v1.9.2+g
v1.9.2+h
v1.9.2+i
v1.9.2+j
v1.9.2+k
v1.9.2+m
v1.9.2+n
v1.9.2+o
v1.9.2+p
v2.0.0
v2.0.1
v2.0.10
v2.0.11
v2.0.12
v2.0.13
v2.0.14
v2.0.15
v2.0.16
v2.0.17
v2.0.18
v2.0.19
v2.0.2
v2.0.20
v2.0.21
v2.0.22
v2.0.23
v2.0.24
v2.0.25
v2.0.26
v2.0.3
v2.0.5
v2.0.6
v2.0.7
v2.0.8
v2.0.9
v2.1.0
v2.1.1
v2.1.10
v2.1.11
v2.1.12
v2.1.13
v2.1.14
v2.1.15
v2.1.16
v2.1.17
v2.1.18
v2.1.19
v2.1.2
v2.1.20
v2.1.21
v2.1.22
v2.1.23
v2.1.24
v2.1.25
v2.1.26
v2.1.27
v2.1.28
v2.1.29
v2.1.3
v2.1.30
v2.1.4
v2.1.5
v2.1.6
v2.1.7
v2.1.8
v2.1.9
v3.0.0
v3.0.0-alpha.1
v3.0.0-beta
v3.0.0-beta.2
v3.0.0-rc
v3.0.1
v3.0.10
v3.0.11
v3.0.12
v3.0.13
v3.0.14
v3.0.15
v3.0.16
v3.0.17
v3.0.18
v3.0.19
v3.0.2
v3.0.20
v3.0.21
v3.0.22
v3.0.23
v3.0.24
v3.0.25
v3.0.26
v3.0.27
v3.0.28
v3.0.3
v3.0.4
v3.0.5
v3.0.6
v3.0.7
v3.0.8
v3.0.9
v3.1.0
v3.1.0-alpha
v3.1.0-beta
v3.1.0-rc
v3.1.0-rc.2
v3.1.0-rc.3
v3.1.1
v3.1.10
v3.1.11
v3.1.12
v3.1.13
v3.1.14
v3.1.15
v3.1.2
v3.1.3
v3.1.4
v3.1.5
v3.1.6
v3.1.7
v3.1.8
v3.1.9
v3.2-alpha.1
v3.2.0
v3.2.0-alpha.1
v3.2.0-beta
v3.2.0-beta.2
v3.2.0-beta.3
v3.2.1
v3.2.10
v3.2.11
v3.2.12
v3.2.13
v3.2.14
v3.2.15
v3.2.16
v3.2.17
v3.2.2
v3.2.3
v3.2.4
v3.2.5
v3.2.6
v3.2.7
v3.2.8
v3.2.9
v4.0.0
v4.0.0-alpha
v4.0.0-beta
v4.0.1
v4.0.2
v4.0.3
v4.0.4
v4.0.5
v4.0.6
v4.0.7
v4.0.8
v4.0.9
v4.1.0
v4.1.0-alpha
v4.1.0-beta
v4.1.0-rc
v4.1.1
v4.1.2
v4.1.3
v4.1.4
v4.1.5
v4.1.6
v4.1.7
v4.2.0-alpha
v4.2.0-alpha2
Labels
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 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
Apply labels
Clear 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 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
No Label
accessibilité
amélioration
APIs
authentification
base de données
bug
code généré
compilo
css
divers
documentation
doublon
ergonomie
espace privé
filtres et balises
formulaires
Inscription
installation
invalide
javascript
langues
LDAP
plugin
PostgreSQL
refusé
sécurité
traduction
Milestone
Set milestone
Clear milestone
No items
No Milestone
Projects
Clear projects
No project
Assignees
Assign users
Clear assignees
No Assignees
3 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
This issue currently doesn't have any dependencies.
Reference in new issue
There is no content yet.
Delete Branch '%!s(MISSING)'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
Quand un objet générique est inséré en base par le biais de l'API, le pipeline
post_insertion
est appelé avant que l'auteur ait été associé à l'objet, cf.ecrire/action/editer_objet.php
, L.210.Du coup, lorsqu'on utilise le pipeline
post_insertion
, à ce stade l'objet est virtuellement sans auteur, ce qui occasionne des désagréments avec certaines fonctions d'autorisations : celles qui vérifient qu'on soit l'auteur de l'objet renvoient des faux négatifs.Je n'ai pas rencontré d'autres problèmes, mais théoriquement, tout traitement qui implique l'auteur de l'objet est impossible.
J'ignore s'il y a une raison particulière à l'ordre actuel, sinon il faudrait faire appel au pipeline
post_insertion
après avoir associé l'auteur à l'objetAllez un exemple concret, c'est plus parlant.
L'exemple suivant montre qu'un rédacteur n'obtient pas l'autorisation de modifier son article après l'insertion en base, alors que théoriquement il devrait pouvoir.
A ce stade, l'article n'a pas encore d'auteur associé, donc les autorisations qui vérifient les auteurs renvoient des faux négatifs.
Hum. Je ne suis pas certain que la liaison avec l'auteur doit être faite avant de passer par post_insertion.
Par contre, si vraiment dans ton plugin tu veux faire une action qui dépend d'une autorisation, tu peux utiliser autoriser_exceptions.
Exemple :
// créer l'auteur en suivant l'API pour que les pipelines s'activent include_spip('action/editer_auteur'); $id_auteur = insert_auteur(); autoriser_exception('modifier', 'auteur', $id_auteur); auteurs_set($id_auteur, array( "nom" => $nom, "statut" => "1comite" )); autoriser_exception('modifier', 'auteur', $id_auteur, false);
Ca résoud un cas de figure lié au problème, mais celui-ci demeure.
Des fois, on a besoin de savoir si on a l'autorisation de mofifier un objet avant poursuivre, non pas de «forcer» celle-ci.
Et là, comme cette autorisation est toujours négative (même quand on devrait y être autorisé), il faut recourir à des hacks inavouables pour contourner le problème, cf. http://zone.spip.org/trac/spip-zone/browser/plugins/albums/trunk/albums_autorisations.php#L153 ou encore http://zone.spip.org/trac/spip-zone/browser/plugins/albums/trunk/albums_autorisations.php#L177
Encore une fois, j'ignore la raison qui fait que l'auteur est associé après l'appel du pipeline, mais en tout cas je constate que ça cause un problème avec certaines autorisations à modifier.
Statut changé à Fermé