我有一個用CakePHP編寫的工具,在給定產品列表的其他功能中,我可以爲我的客戶創建訂單,採購訂單,產品目錄等。但是,我有多個用戶創建和編輯這些命令,這使我想到了這個問題。編輯同一張表格/資源的兩個用戶
如何顯示警告或以某種方式阻止多個用戶使用同一個對象?現在,在編輯任何內容之前,每個人都必須口頭問。
在此先感謝。
我有一個用CakePHP編寫的工具,在給定產品列表的其他功能中,我可以爲我的客戶創建訂單,採購訂單,產品目錄等。但是,我有多個用戶創建和編輯這些命令,這使我想到了這個問題。編輯同一張表格/資源的兩個用戶
如何顯示警告或以某種方式阻止多個用戶使用同一個對象?現在,在編輯任何內容之前,每個人都必須口頭問。
在此先感謝。
可以在表中設置標誌,當產品用戶請求和保存刪除標誌..但那裏有一些額外的問題:
我的命題是:
添加 '日期時間' 列到你的餐桌,讓稱它爲 「lock_date」:
添加lock_user_id列到表,
當用戶打開產品 - 將lock_date設置爲當前日期時間,並從會話中設置lock_user_id
在客戶端:
1)檢查是否:當任何用戶試圖打開相同的產品每分鐘更新「lock_date」字段發送AJAX請求到其他方法與當前的日期時間
lock_date <當前日期時間減去1分鐘。如果爲true:允許編輯
2)如果爲false:檢查是否lock_user_id == session.user_id。如果爲true - 允許編輯(如果用戶意外刷新頁面,或者嘗試在意外按下「返回」按鈕時嘗試打開同一產品,或嘗試在其他瀏覽器中編輯產品,此條件非常有用)
這是天才......!我曾經想過這樣的事情,但你給了我解決方案!非常感謝你! – Chrishow
您可以在該對象上設置一個標誌,該對象被請求編輯時將該標誌設置爲true,並在編輯被持久保存到該對象時爲false。
隨着該標誌,那麼你可以防止物體被編輯時
if(!flag) {
//code with form to edit the object
<form action="object.php" method="post">
.....
</form>
} else {
//either disable the form fields or better solution show message to
//user that the object is being edited and they should try again later
$this->flash->set("This record is currently being edited. Please try again later");
}
這兩個最後的方法是我喜歡當時使用的事情,但不適合由Rayann Nayran在上面陳述,用date_lock我解決了這個問題。 – Chrishow
你可以一個user_id
列添加到您的表,一旦用戶請求與實體工作,設置此user_id
到實體並將其保存在數據庫中。如果請求的操作符合您的條件,可以在控制器initialize()
函數中定義它。
並且在beforeSave()
函數中,您可以將user_id
設置爲null
。
然後,在渲染模板之前,您檢查是否user_id
是null
以進行渲染或不渲染。
請始終提及您的確切CakePHP版本(vendor/cakephp/cakephp/VERSION.txt或lib/Cake/VERSION.txt中的最後一行) –
是忘記了,它是v 0.2.9。 – Chrishow