Bir kullanıcı öğeyi düzenleme ise bir ayrıntı görünümü kilitleme

1 Cevap php

Ben düzenlenebilir öğelerin ayrıntı görünümüne erişimi kontrol gereken bir kullanıcı yöneticisi geliştiriyorum. Bir kullanıcı tıklama 'edit' Şu anda, uygulamanın bir kullanıcı şu anda değilse, bu sayfaya erişim sağlar ve daha sonra başka bir kullanıcı önlenmesi bağlantı tabloya bir kayıt ekler, o sayfayı düzenleme olup olmadığını kontrol etmek için bağlantı tablosunu sorgular Aynı zamanda aynı sayfayı düzenleme.

Benim soru kayıtlarının çıkarılmasını işlemek için en iyi yolu, bir kullanıcı kaydı kaldırmak için, bu nedenle hiçbir eylem, vb kaydetmeden tarayıcıyı varsa söyleyebilirim eğer budur.

Ben fikirlerin bir çift var ama karar vermeden önce diğer girişi istiyorum.

BenTheDesigner

1 Cevap

Basit bir zaman aşımı. Tabloda last_seen bir alan varsa ve kullanıcı bir eylem gerçekleştirdiğinde şimdiki zaman ile güncelleyin. Ardından, last_seen alan üzerinde 15 dakika ya da çok eski olup olmadığını kontrol kaydı silebilirsiniz.

Bazı sözde-ish kodu:

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.";
    }
}