我有一个用CakePHP编写的工具,在其他功能中,给定产品列表,允许我为我的客户创建订单,采购订单,产品目录等。但是我有多个用户创建和编辑这些订单,这让我想到了这个问题。
如何显示警告或以某种方式阻止多个用户处理同一个对象?现在每个人都必须在编辑任何内容之前口头询问。
提前致谢。
答案 0 :(得分:1)
您可以向您的表添加user_id
列,一旦用户请求使用实体,您将此user_id
设置为该实体并将其保存在数据库中。如果请求的操作符合您的条件,则可以在控制器initialize()
函数中定义。
在beforeSave()
功能,您可以将user_id
设置为null
。
然后,在渲染模板之前,检查user_id
是否null
进行渲染。
答案 1 :(得分:1)
您可以在用户请求产品时在表格中设置标记,并在保存时删除标记..但还有一些其他问题:
我的主张是:
添加' datetime'在您的表格中,我们可以将其称为" lock_date":
将lock_user_id列添加到您的表中,
当用户打开产品时 - 将lock_date设置为当前日期时间,将lock_user_id设置为会话
在客户端:每分钟向其他方法发送ajax请求以进行更新" lock_date"具有当前日期时间的字段
当任何用户尝试打开同一产品时:
1)检查lock_date是否<当前日期时间减去1分钟。如果为true:允许编辑
2)如果为false:检查lock_user_id == session.user_id。如果为true - 允许编辑(如果用户意外刷新页面,或者在意外按下"返回"按钮或尝试在其他浏览器中编辑产品时尝试打开相同的产品,则此条件非常有用)
答案 2 :(得分:0)
您可以在对象上设置一个标志,当该对象被请求编辑时,该标志设置为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");
}