2012-03-16 51 views
3

让我说我正在做一个ajax调用一些cakePHP控制器的操作来从数据库中删除一些数据。但是,在我删除数据(当然在CakePHP控制器操作中发生的)之前,我想检查请求删除数据的用户是否有权这样做。我正在试图做的是要显示给用户执行的步骤,例如我有这样的事情:显示jquery ajax执行状态

$.ajax({ 
    type: 'POST', 
    url: '.../some_cakePHP_controller_action', 
    beforeSend: function(){ 
     $("my_loading_div").html("Checking permissions..."); 
    } 
    success: function(){ 
     // do stuff on success 
    } 
}); 

1-当用户点击删除,我想向他出示装载DIV用像Checking permissions...

2-消息如果用户有权限删除数据时,消息Removing data...

改变现在,你可以在上面看到,问题是,当用户点击删除,他将有消息Checking permissions....,但我的数据可能已被删除,因为我已经在我的cakePHP乐趣ction。所以,用户会有错误的信息。我该如何实现这种行为?

在此先感谢您的帮助

+3

为此,你需要检查一次两次调用$阿贾克斯,然后removing.or未来阿贾克斯$两个步骤。 – 2012-03-16 19:55:56

回答

3

您需要多个ajax调用。步骤将是这样的,

  1. ajax调用检查权限。
  2. 在php结束检查您是否有is_writable函数的删除权限。
  3. 返回上一步的状态,并显示此作为Ajax响应
  4. 根据第3步的状态发送删除请求AJAX
  5. 在PHP结束通话unlink到PHP。然后再检查文件是否由file_exists
  6. 存在返回前面的步骤,并显示消息的用户相应
+0

我想我可以在一个Ajax调用中做到这一点,我想我需要2个电话 – user765368 2012-03-16 20:04:37

+0

@ user765368是的。步骤1和步骤4 – 2012-03-16 20:07:05

1

您可以或许希望让2和AJAX调用状态。首先检查权限,如果权限可用,则删除该项目。

$("statusDiv").html("Checking permissions").fadeIn(100,function(){ 

    $.post("checkpermission?item=23",function(data){ 

     if(data=="allowed") 
     { 
      $("#statusDiv").html("Deleting..."); 
      $.post("mycontroller/delete/23",function(result){ 
       if(result=="deleted") 
       { 
        $("#statusDiv").html("Deleted Successfully"); 
       } 
      });  
    }); 

}); 
1

这不是安全的,如果用户是通过JS允许或不验证! 在点击“删除”之前可以修改JS。 你应该通过PHP或两者来验证它。

1

就个人而言,我会在给他们删除选项之前检查权限。当页面被渲染时,我很可能会这样做。喜欢的东西:

<?php if (hasPermission) { ?> 
    html to show delete function 
<?php } else { ?> 
    html to login to delete 
<?php } ?>