我允许用户删除他们上传的图片,但之后可以通过更改图片名称轻松删除属于其他用户的图片。
我在下面的工作代码用于删除图像...使用用户名前缀获取用户图像,例如joe/some_image.jpg
并且用户使用复选框选择要删除的图像。
//images to be deleted
$images = array("joe/angry_robot.jpg", "joe/baby_with_mustache.jpg");
//create multidimensional array to use in class
foreach($images as $key => $value)
{
$array[] = array(
'key' => $value
);
}
$this->load->library('awslib');
//initiate the class
$s3 = new AmazonS3();
$bucket = 'my_bucket';
$response = $s3->delete_objects ($bucket, array(
'objects' => $array
));
// Success?
var_dump($response->isOK());
S3中有哪些解决方案可以安全地删除存储桶中的对象?我正在寻找某种用户身份验证方法。
答案 0 :(得分:1)
维护每个用户拥有的文件列表。
class User
{
// yourproperties
// array of owned images
private $images;
public function addImage($image)
{
$this->images[] = $image;
}
public function ownsImage($image)
{
return in_array($image, $this->images);
}
public function removeImage($image)
{
if( ( $key = array_search($image, $this->images) ) !== false ) {
unset($this->images[$key]);
return true;
}
return false;
}
}
然后....
if( $user->ownsImage($imageToDelete) ) { // proceed } else { // not authorized }
无论以何种方式处理持久性,都要将该数组映射到数据库。
或者在您的应用程序中以任何其他方式执行此操作。最终用户的授权不应由S3处理。