2012-09-18 127 views
0

我允許我的用戶刪除他們上傳的圖片,但可以通過更改圖片名稱輕鬆刪除屬於其他用戶的圖片。亞馬遜S3安全刪除對象

我的以下工作代碼用於刪除圖像...用戶圖像是使用用戶名前綴提取的,例如, 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中有哪些解決方案可用於安全刪除存儲桶中的對象?我正在尋找某種用戶身份驗證方法。

回答

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

+0

謝謝我會測試!我不確定你是否嘗試了這個,但我注意到在S3中你可以爲對象創建元數據。假設我創建了一個名爲'username'的元數據,上傳圖片時用戶名用戶名填充。我可以通過比較用戶名和元數據來授權用戶嗎?這樣我不必使用數據庫。 – CyberJunkie

+0

@Cyber​​Junkie你可以這樣做,但調用S3中的每個項目來獲取其元數據所需的時間要比從其他持久存儲形式中獲取與用戶關聯的項目列表要長很多。 –