[SPIP Zone] r11812 - in /_plugins_/_dev_/autorite: fonds/cfg_autorite.html inc/autoriser.php

fil-JM9gtpQu/Ho@public.gmane.org wrote:

Author: fil-JM9gtpQu/Ho@public.gmane.org
Date: Thu May 3 01:08:53 2007
New Revision: 11812

Log:
je hacke a fond pour assurer la securite et un affichage sympa...

> il vaudrait mieux que je m'abstienne, toggg

Ah, ça serait dommage pour un gogo :slight_smile:

Je ne sais trop quoi dire mais il est clair que ce truc commence à me déplaire aussi, pour quelque chose qui se voudrait moderne il y a beaucoup trop de html intégeé dans le php. Je voudrais bien que tout passe par des, ou plutôt *le*, modèle. Je dit *le* car je ne pense pas qu'il soit souhaitable de multiplier les recuperer_fond().

Déjà, si je comprends ton hack, tu aurais besoin de faire passer au fond des paramètres supplémentaires (hors champs) et pour cela exécuter une certaine dose de php.
J'avais envisagé à l'époque de fournir une propriété genre
[(#REM) include_php=inc/cfg_autorite.php]
qui permettrait de faire appel à du php custom.
Mais ce ne serait pas très satisfaisant, car comment récupérer et intégrer ce que ce php ferait ?
Il serait dommage de ne pas profiter du mécanisme objet de cfg, en théorie on peut étendre la classe utilisée, cf. function exec_cfg_dist()
Et là, si on passe par ce genre de propriété, c'est déjà trop tard car l'objet est déjà créé.

Ce que je me propose de faire:
Avant d'instancier l'objet cfg, inclure si il existe un truc comme inc/cfg_machin.php ou plutôt fonds/cfg_machin.php pour garder les sources cote à cote

Dans ce php, tu définis ta classe cfg qui étend cfg_dist.
Par exemple, fonds/cfg_autorite.php contiendrait:
<?php
class cfg extends cfg_dist
{
  var $propriete_en_plus = ...

  function cfg($nom, $vue = '', $cfg_id = '', $opt = array())
  {
    ... des trucs spécifiques ...
    parent::cfg_dist($nom, $vue, $cfg_id, $opt)
    ... des trucs spécifiques post instanciation
  }
  // passer des éléments supplémentaires à recuperer_fond
  function get_fond($contexte = array())
  {
    $contexte['env_sup'] = ...;
    ...
    return parent::get_fond($contexte);
  }
  // cfg_dist fournirait une methode autoriser() {return true;}
  // si pas bon ==> un minipres() + exit
  // ici, tu peux la redéfinir
  function autoriser()
  {
    // evaluer si tu autorises ce cfg
    if (bla bla) {
      // ou return true; mais autant réserver le futur
      return parent::autoriser();
    }
    return false;
  }
  // autres methodes redefinies
  ...
}
?>

Ça me semble assez élégant ... on pourrait aussi redéfinir carrément sortie(), debut_page() ... etc.

Eventuellement, ça peut poser un problème si on a plusieurs cfg de natures différentes sur la même page, mais on pourra implanter facilement un mécanisme pour permettre plusieurs redéfinitions avec des noms de classe différents quand cfg sera complètement éclaté et plus seulement un exec ... on verra.

Par ailleurs, pour la demande de Nicolas, je vais implanter un methode log() qui fera essentiellement un spip_log() des valeurs anciennes/nouvelles en cas de modification. (aussi redéfinissable, bien sûr)

Enfin, je vais rapidement enlever le sabot, il semble que la séparation du storage ne pose pas de problème ... pour l'instant. Par exemple "classic" pourrait permettre de refaire les panneaux de configuration actuels.
--
toggg

Déjà, si je comprends ton hack, tu aurais besoin de faire passer au fond
des paramètres supplémentaires (hors champs) et pour cela exécuter une
certaine dose de php.

Non, pas vraiment, je pourrais exécuter le php dans les mes_fonctions
; ce qui est problématique c'est que je ne peux pas mettre de balises
ni de php dans la partie "description" ; si je le mets après </form>
ça vient se mélanger avec le bouton "OK".

Par ailleurs pour la sécurité, je me disais qu'on pourrait avoir x
modèles d'autorisation (via inc/autoriser) pour les cfg, et que chaque
cfg_xxx.html précise quel modèle il appelle. Par exemple ici on dirait
[(#REM) autoriser=webmestre ]

-- Fil

Fil wrote:

Déjà, si je comprends ton hack, tu aurais besoin de faire passer au fond
des paramètres supplémentaires (hors champs) et pour cela exécuter une
certaine dose de php.

Non, pas vraiment, je pourrais exécuter le php dans les mes_fonctions
; ce qui est problématique c'est que je ne peux pas mettre de balises
ni de php dans la partie "description" ; si je le mets après </form>
ça vient se mélanger avec le bouton "OK".

As-tu essayé avec:
<!-- descriptif=.....-->
?
Dans ce cas, ton descriptif passe dans le recuperer_fond(), tu peux donc y mettre ce que tu veux...

Par ailleurs pour la sécurité, je me disais qu'on pourrait avoir x
modèles d'autorisation (via inc/autoriser) pour les cfg, et que chaque
cfg_xxx.html précise quel modèle il appelle. Par exemple ici on dirait
[(#REM) autoriser=webmestre ]

Ça pourrait être un premier niveau simple et interne au fond de redéfinition de autoriser() ... à voir
--
toggg

As-tu essayé avec:
<!-- descriptif=.....-->
?
Dans ce cas, ton descriptif passe dans le recuperer_fond(), tu peux donc
y mettre ce que tu veux...

Ah voilà. Ca marche :slight_smile:

-- Fil

Fil wrote:

Par ailleurs pour la sécurité, je me disais qu'on pourrait avoir x
modèles d'autorisation (via inc/autoriser) pour les cfg, et que chaque
cfg_xxx.html précise quel modèle il appelle. Par exemple ici on dirait
[(#REM) autoriser=webmestre ]

Voilà, Fil Bey, 11823.
--
toggg