在CakePHP 2.4中由单个用户编辑时,锁定其他用户的记录

时间:2013-08-03 05:32:11

标签: cakephp locking cakephp-2.0

我正在实施CakePHP 2.4应用程序。

我有UserArticle作为模特。

我没有articles/view行动;仅限articles/editarticles/delete actions

当任何User访问articles/edit网页时,无论GET还是POST如何,该特定Article都会被其他用户阻止编辑/删除。

以下是我需要建议的关键部分。

如果用户留在articles/edit/23但30分钟内没有活动,

- 或 -

当用户离开articles/edit/23页面时,

然后articles/23现在可供其他用户编辑/删除。

在我的脑海中,我知道在文章表中,我需要一个名为current_locked_by的字段,该字段包含当前处于控制状态的用户的user_id。

我的问题是检测到会话不活动并且知道用户已离开编辑页面。

当用户未在任何输入元素中键入任何内容或更改任何下拉选项或选中/取消选中任何复选框 时,我在编辑页面中将会话不活动定义为

建议?

1 个答案:

答案 0 :(得分:0)

您可以使用用户,资源和锁定时间的组合创建锁定表。 (关于你的规范什么时候开始不活动 - 我建议更简单地开始:“当他们加载页面时”。否则你也会在每次字段更改结束时写javascript写入你的数据库。)

每当有人进入编辑页面时,

  1. 他们检查该表是否有资源和锁定时间。如果记录不存在或已超过锁定时间,则可以安全地进行编辑。
  2. 如果他们可以编辑,那么他们会根据需要插入记录(并删除包含该资源的所有记录。)
  3. 这应该考虑到超时要求,只要你确保当他们试图保存他们的更改时仍然有锁(或其他人没有锁定记录)。

    处理页面离开的一种技术是放入beforeFilter测试,删除该人的所有锁定。缺点

    • 你还是不知道这个人是否离开并去了一些外部 现场。
    • beforeFilter会为每个页面视图添加开销。
    • 如果您的用户运行两个或多个标签页,则会导航其他标签页 释放锁。

    您也可以让该页面上的每个出站链接释放锁定(如进入插页式页面),并通过关闭标签,使用地址栏等超时让任何离开。 (这取决于用户的工作方式。)