Question

Je développe une application php / mysql qui gère plusieurs utilisateurs simultanés. Je pense à la meilleure approche à adopter en matière de verrouillage / avertissement contre les enregistrements qui sont en cours de visualisation / sous la direction.

Le scénario est d'éviter deux utilisateurs qui consultent le dossier, on fait un changement, puis l'autre faire de même -. Avec le potentiel que l'on pourrait remplacer le changement précédent

Dans les dernières versions de WordPress, ils utilisent une méthode pour détecter, mais il ne semble pas tout à fait fiable -. Retournant souvent faux positifs, au moins dans mon expérience

Je suppose une certaine forme de paiement ajax doit être en place pour « ping » l'application et le faire savoir le dossier est toujours en cours de visualisation / édition (sinon, un utilisateur peut simplement fermer la fenêtre de leur navigateur, et comment serait l'application savoir cette).

Une autre solution que je pouvais voir est de vérifier la dernière fois mis à jour lorsqu'un enregistrement est soumis à la mise à jour, pour voir si, dans l'intervalle, il a été mis à jour ailleurs - et offrir alors l'utilisateur un choix de procéder ou de rejeter leurs propres changements.

Peut-être que je suis aboyer le mauvais arbre en termes d'une solution - ce sont les expériences des peuples de mettre en œuvre ce (ce qui doit être assez courant) exigence

Était-ce utile?

La solution

Je ferais ceci: Conserver le temps de la dernière modification sous la forme d'édition. Comparez cette fois sur la soumission avec le temps stocké dans la base de données. Si elles sont les mêmes, verrouiller la table, mettez à jour les données (ainsi que le temps de modification) et déverrouiller la table. Si les temps sont différents, informer l'utilisateur à ce sujet et demander l'étape suivante.

Autres conseils

Bonne idée avec la comparaison d'horodatage. Il est peu coûteux à mettre en œuvre, et il est une opération peu coûteuse à courir dans la production. Il vous suffit d'écrire la logique d'envoyer à l'utilisateur le message d'état que leur écriture / mise à jour n'a pas eu lieu parce que quelqu'un les devança.

Peut-être envisager de stocker le nom d'utilisateur sur chaque mise à jour dans un champ appelé quelque chose comme « LastUpdateBy », et le retour qui à l'utilisateur qui a leur mise à jour pré-empted. Juste un peu nicety pour l'utilisateur. Belle au sens de l'entreprise, peut-être pas dans un environnement où il pourrait ne pas être approprié.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top