web-dev-qa-db-fra.com

Restreindre l'utilisateur pour modifier directement un enregistrement en modifiant la valeur de l'ID dans l'URL.

en fait, je crée un composant dans lequel je suis confronté à un problème pour empêcher un utilisateur back-end d'éditer directement un enregistrement.

Je sais que lorsque nous modifions un enregistrement dans joomla à l'aide de la fonction "controller.edit", il utilise la fonction HoldEditId () pour stocker l'identifiant actuel dans l'état utilisateur passé à l'aide de l'URL

j'utilise la valeur stockée à l'aide de la fonction HoldEditId () dans le modèle pour vérifier si l'identifiant de l'URL est identique à celui stocké dans la variable userState pour charger les données d'enregistrement correctes

Mais HoldEditId conserve non seulement la valeur actuelle, mais également le dernier identifiant d’enregistrement modifié. Le problème est maintenant de savoir comment puis-je savoir quel identifiant est actuellement stocké et quel identifiant est inséré en dernier

la solution consiste donc à supprimer les anciennes valeurs à l'aide de la fonction holdeditid, lorsqu'un utilisateur clique sur le bouton fermer ou annuler, mais comment puis-je le faire et si cela est correct ou si je me trompe très bien, il existe un autre moyen simple.

2
Sumer Raj Chouhan

Voici comment charger l'id de votre enregistrement actuel à partir de l'état de votre classe de modèle.

$pk = (!empty($pk)) ? $pk : (int) $this->getState($this->getName() . '.id');

Si vous voulez obtenir la dernière valeur modifiée dans votre fonction holdEditId, vous pouvez utiliser:

$recordId = array_pop($values)

Mais idéalement, vous ne devez pas remplacer la fonction holdEditId. Vous devez passer l'identifiant dans votre URL pour qu'il soit automatiquement renseigné dans votre modèle.

Cela se produit dans la fonction populateState de votre modèle s'il étend JModelAdmin. Vous pouvez remplacer la fonction populateState dans votre modèle pour renseigner d'autres variables si nécessaire.

1
Nagarjun