2 Stimmen

Sperren einer Detailansicht, wenn ein Benutzer den Artikel bearbeitet

Ich entwickle eine Benutzerverwaltung, die den Zugriff auf die Detailansicht von bearbeitbaren Elementen steuern muss. Wenn ein Benutzer auf "Bearbeiten" klickt, fragt die Anwendung derzeit die Verknüpfungstabelle ab, um zu prüfen, ob ein Benutzer die Seite gerade bearbeitet. Wenn nicht, wird der Zugriff auf die Seite gestattet und ein Datensatz in die Verknüpfungstabelle eingefügt, der verhindert, dass ein anderer Benutzer dieselbe Seite gleichzeitig bearbeitet.

Meine Frage ist, was wäre der beste Weg, um die Entfernung von Datensätzen zu behandeln, wenn sagen, ein Benutzer besteht der Browser ohne Speichern usw., also keine Aktion, um den Datensatz zu entfernen.

Ich habe ein paar Ideen, würde aber gerne andere Meinungen hören, bevor ich mich entscheide.

BenTheDesigner

1voto

Tatu Ulmanen Punkte 119424

Eine einfache Auszeit. Ein Feld haben last_seen in der Tabelle und aktualisieren sie mit der aktuellen Zeit, wenn der Benutzer eine Aktion durchführt. Dann können Sie prüfen, ob die last_seen Feld mehr als 15 Minuten alt ist, löschen Sie den Datensatz.

Etwas pseudo-ähnlicher Code:

edit_something() {

    // Assume there's a lock
    $is_editable = false;

    // Check if lock exists
    $q = mysql_query("SELECT * FROM linktable WHERE item_id = 2");

    // If a lock exists
    if(mysql_num_rows($q) > 0) {

        // Check if it's timed out
        $r = mysql_fetch_assoc($q);

        // Delete lock if it's over 15 minutes old
        if(time() - $r > 15 * 60) {
            mysql_query("DELETE FROM linktable WHERE item_id = 2");
            $is_editable = true;
        }
    } else {
        $is_editable = true;
    }

    if($is_editable) {
        // Lock for current user
        mysql_query("INSERT INTO linktable SET item_id = 2, user_id = 5, last_seen = NOW()");
    } else {
        echo "Sorry, it's locked.";
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X