2011-02-03 76 views
0

我是新的蛋糕,但我設法達到目前爲止。在我發現html2pdf是一個用於生成PDF文檔的便捷方式之後,我已經安裝了html2ps/pdf並且在一些小問題之後能夠正常工作。所以,現在我現在來點,如果我不改變我的控制器beforeRender功能,如:Cakephp html2pdf認證問題

function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('download','view'); 
} 

我只是看到我創建的PDF從來就loginpage。在我的beforeRender函數中設置$ this-> Auth-> allow值明顯地打開了所有未經授權即可獲得完美pdf的途徑。整個控制器看起來是這樣的:

<?php 
class DashboardController extends AppController { 

    var $name = 'Dashboard'; 
    var $uses = array('Aircrafts','Trainingplans', 
         'Fstds','Flights','Properties','Person');    

    function beforeFilter() { 
    parent::beforeFilter(); 
    $this->Auth->allow('download','view'); 
    } 

    function view() { 
     /* set layout for print */   
     $this->layout = 'pdf';   
     /* change layout for browser */ 
     if> (!isset($this->params['named']['print'])) 
     $this->layout = 'dashboard'; 
     /* aircrafts */ 
     $this->Aircrafts->recursive = 0; 
     $aircrafts =$this->Aircrafts->find('all'); 
     $this->set('aircrafts',$aircrafts); 

.... and so on.... 

     $this->set('person_properties',$person_properties); 
    } 


    function download($id = null) { 
     $download_link = 'dashboard/view/print:1'; 
     // Include Component 
     App::import('Component', 'Pdf'); 
     // Make instance 
     $Pdf = new PdfComponent(); 
     // Invoice name (output name) 
     $Pdf->filename = 'dashboard-' . date("M"); 
     // You can use download or browser here 
     $Pdf->output = 'download'; 
     $Pdf->init(); 
     // Render the view 
     $Pdf->process(Router::url('/', true) . $download_link); 
     $this->render(false); 
    } 
} 
?> 

所以,在我看來,$ PDF - >進程調用通過調用或多或少視圖get's的數據,但這個過程沒有登錄,或者換句話說沒有獲得我想要呈現到pdf中的數據的授權。所以現在的問題是如何通過不向所有人開放我的應用程序來完成它。

最好的問候,cdjw

回答

0

編輯:

你可以做這樣的事情:

if($this->Session->check('Auth.User')) { 
     // do your stuff 
} else { 
     // do something else 
} 
+0

感謝您的回答。但是,這意味着,如果我錯了,糾正我,我的下載功能顯然不能再訪問一個沒有登錄的人。到目前爲止這麼好,這是我想要的第二位。主要的問題在於,任何人都可以訪問該視圖,只要$ Pdf-> process試圖在單獨的會話中收集日期。查看數據是我想要防止如果用戶沒有登錄。我是對的嗎? – 2011-02-03 10:13:01

+0

好的。我已更新我的回答 – 2011-02-03 10:19:37

0

你可以渲染之前檢查兩件事情/視圖:

  • 一有效會話(用戶已登錄)
  • 有效從您的下載操作中通過的安全令牌作爲命名參數

對於安全令牌,只需組成一個長的隨機字符串。

由於PDF在同一臺服務器上呈現,令牌在打開時永遠不會被識別並提供足夠的安全性。

希望這是您的工作理念。

0

我有這個類似的問題,這就是我如何處理它... 我第一次注意到,PdfComponent的進程調用是從同一個服務器做請求,所以我欺騙CakePHP允許視圖只用於請求被從服務器本身..作出這樣的:

public function beforeFilter() { 
    if ($this->request->params['action']=='view'&&$_SERVER['SERVER_ADDR']==$_SERVER['REMOTE_ADDR']) { // for PDF access 
     $this->Auth->allow('view'); 
    } 
} 
0

你應該把

$this->Auth->allow('download','view'); 

內的AppController。而不是放置在現在使用的位置。

function beforeFilter() { 
    $this->Auth->allow('download','view'); 
    .... 
}