2012-12-08 24 views
1

我正試圖拉扯特定朋友的照片。因此,我創建了一個具有user_photosfriends_photos權限的訪問令牌。即使權限正確,也無法拉扯朋友的照片

  1. 我可以運行一個查詢來獲取照片有我名字:

    SELECT object_id FROM photo_tag WHERE subject=me()

  2. 我可以用我的()或USER_ID指自己:

    SELECT object_id FROM photo_tag WHERE subject=1102318

但是當我要求照片的朋友是ta gged中,我得到空集:

SELECT object_id FROM photo_tag WHERE subject=1102054 

- > []

有什麼奇怪的是,我可以拉photo_tags的所有所有朋友,使用以下(塊狀)查詢:

SELECT object_id FROM photo_tag WHERE subject IN 
    (SELECT uid2 FROM friend WHERE uid1=me()) 

- > works(!),返回第1400個左右。所以它似乎不是一個權限問題。

我還可以從上表中選擇單個用戶的照片

SELECT object_id FROM photo_tag WHERE subject IN 
    (SELECT uid2 FROM friend WHERE uid1=me() LIMIT 1) 

- >也適用

但是索引表失敗

SELECT object_id FROM photo_tag WHERE subject IN 
    (SELECT uid2 FROM friend WHERE uid1=me() LIMIT 1 OFFSET 3) 

- > [ ]

我想知道是否有人曾經見過類似這種行爲。我提交了bug report,如果我聽到任何消息,我會報告。

+0

感謝您提供有用的答案,但它並未回答問題,因爲標題顯示「權限正確」。具體來說,'SELECT object_id FROM photo_tag WHERE subject IN (SELECT uid2 FROM friend WHERE uid1 = me()LIMIT 1)'works that fact that the user not do not allowed shared。 – bcattle

回答

2

臉書沒有公開告訴你,是用戶可以決定什麼樣的數據提供給其他Facebook用戶使用的應用程序(請查看「其他用戶使用」部分here)。因此,如果用戶1102054在你的榜樣決定禁止他的照片被其他人使用的應用程序進行訪問,然後查詢如

SELECT object_id FROM photo_tag WHERE subject=1102054 

將失敗。

但是,如果在你的例子,用戶1102054別人,允許應用程序訪問的照片被標記在一個特定的圖片,那麼你就可以通過查詢這樣做仍然可以訪問該圖片:

SELECT pid FROM photo_tag WHERE subject=1102054 
      AND pid in (SELECT pid FROM photo_tag WHERE subject=<other user id here>) 

小心,雖然。切換上述兩個用戶ID仍然會返回一個空數據集:

SELECT pid FROM photo_tag WHERE subject=<other user id here> 
      AND pid in (SELECT pid FROM photo_tag WHERE subject=1102054) 
相關問題