2015-09-09 40 views
-1

基本上,我使用標準的Yii2設置。我有一個登錄,允許用戶查看文件的鏈接。這些文件位於下載文件夾中......但只有當用戶「不是客人」時才能看到鏈接的頁面。現在,如果任何人只是將鏈接複製到其他人,那麼其他人將能夠在不登錄的情況下下載文件。所討論的文件沒有被「支付」,但是我需要在他們之前有人登錄由於服務條款和其他法律允許下載。我可以動態創建通過PHP的下載鏈接?至少檢查「isGuest」,如果isGuest = True,則重定向到登錄頁面。我怎麼做,而不是隻有一個直接的下載鏈接?如何防止未登錄Yii2項目的人下載文件?

回答

0

您可以通過AccessControl Class爲特定角色或用戶提供特定操作的訪問權限。

你可以做這樣的事情:

class DownloadController extends Controller 
{ 
    public function behaviors() 
    { 
     return [ 
      'access' => [ 
       'class' => AccessControl::className(), 
       'rules' => [ 
        [ 
         'allow' => false, 
         'actions' => ['download'], 
         'roles' => ['?'], 
        ], 
       ], 
      ], 
     ]; 
    } 
    // ... 
} 

'?'角色是guest用戶。

+0

非常感謝!這是我需要的。加上如何直接禁止文件的第一個答案。 –

+0

所以基本上做一個「每個人登錄組」並取代'?'這很完美。只需定義使用「sendFile」方法的操作?非常好。基本上,example.org/index.php?download="stuff.mp3「而不是example.org/downloads/stuff.mp3?棒極了。非常感謝。 –

0

您可以在控制器的動作添加檢查,以驗證用戶是否登錄或不使用:

Yii::$app->user->getIsGuest();

看更多細節的文檔:Yii2 web user

+0

我知道如何檢查IsGuest,但是,謝謝你的回答。正如其他人所說的那樣,我需要通過一個控制器來檢查isGuest文件。不是直接下載。謝謝。 –

0

禁止訪問任何人都可以通過該文件直接下載。您可以使用htaccess或將下載文件夾放入受保護的文件夾中。現在,您需要在控制器中進行下載操作,以檢查用戶是來賓還是登錄。如果確定,只需將文件從文件系統傳遞到用戶瀏覽器即可。 phps readfile可以幫助你在這裏。

+0

超級超級感謝!你的第三個答案非常有幫助。謝謝! –