我有一个用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