假设我正在对一些cakeHP控制器操作进行ajax调用,以从数据库中删除一些数据。但在我删除数据之前(这当然发生在我的cakeHP控制器操作中),我想检查请求删除数据的用户是否有这样做的权限。我试图做的是向用户显示执行的步骤,例如,我有这样的东西:
$.ajax({
type: 'POST',
url: '.../some_cakePHP_controller_action',
beforeSend: function(){
$("my_loading_div").html("Checking permissions...");
}
success: function(){
// do stuff on success
}
});
1-当用户单击DELETE时,我想向他显示一个加载div,其中包含类似Checking permissions...
的消息
2-如果用户有删除数据的权限,则Removing data...
的消息会发生变化
现在,正如您在上面看到的,问题是当用户单击DELETE时,他将收到消息Checking permissions....
,但我的数据可能已经被删除,因为我已经在我的cakeHP函数中了。因此,用户将收到错误的消息。请问我该如何实现这种行为?
提前感谢的任何帮助
为此需要多次ajax调用。步骤是这样的,
- ajax调用以检查权限
- 在php端,使用is_writeable函数检查您是否具有删除权限
- 返回上一步的状态,并将其显示为ajax响应
- 根据步骤3的状态。通过ajax将删除请求发送到php
- 在php端调用unlink。然后通过file_exists再次检查该文件是否存在
- 返回上一步的状态并相应地向用户显示消息
您可能想要进行两次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");
}
});
});
});
通过JS验证用户是否被允许是不安全的!!!JS可以在点击"删除"之前进行修改。您应该通过PHP或两者同时验证它。
就我个人而言,在给他们删除某些内容的选项之前,我会检查权限。我很可能只是在渲染页面时这样做。类似于:
<?php if (hasPermission) { ?>
html to show delete function
<?php } else { ?>
html to login to delete
<?php } ?>