0

我允许我的用户删除他们上传的图像,但随后可以通过更改图像名称轻松删除属于其他用户的图像。

下面是我用于删除图像的工作代码...用户图像是使用用户名前缀获取的,例如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 中有哪些解决方案可用于安全删除存储桶中的对象?我正在寻找某种用户身份验证方法。

4

1 回答 1

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 处理。

于 2012-09-18T03:19:03.617 回答