0

私はケーキが初めてですが、どういうわけかこれまでのところうまくいきました。html2pdfがCakephpからpdfドキュメントを作成するための便利な方法であることがわかった後、html2ps / pdfをインストールし、いくつかの小さな問題の後でそれが機能しました。だから今、私は今、コントローラーを変更しないと、Renderが次のように機能するようになります。

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

作成したPDFにログインページが表示されます。私の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-> process呼び出しは、多かれ少なかれビューを呼び出すことによってデータを取得しますが、このプロセスはログインしていません。つまり、PDFにレンダリングしたいデータを取得する権限がありません。ですから、問題は、私のアプリケーションをすべての人に開かないことによって、それをどのように実行するかということです。

よろしく、cdjw

4

4 に答える 4

0

編集:

次のようなことができます。

 if($this->Session->check('Auth.User')) {
        // do your stuff
 } else {
        // do something else
 }
于 2011-02-03T05:43:53.440 に答える
0

私はこの同様の問題を抱えていましたが、これが私がそれを処理した方法です... PdfComponent のプロセス呼び出しが同じサーバーからのリクエストを実行していることに最初に気付きました。サーバー自体..次のように:

public function beforeFilter() {
    if ($this->request->params['action']=='view'&&$_SERVER['SERVER_ADDR']==$_SERVER['REMOTE_ADDR']) { // for PDF access
        $this->Auth->allow('view');
    }
}
于 2012-01-15T02:45:40.290 に答える
0

あなたは置くべきです

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

AppController内。今使っている場所ではなく。

function beforeFilter() {
    $this->Auth->allow('download','view');
    ....
}
于 2013-04-05T13:21:40.593 に答える
0

/view をレンダリングする前に、次の 2 つのことを確認できます。

  • 有効なセッション (ユーザーがログインしている)
  • ダウンロード アクションから名前付きパラメーターとして渡す有効なセキュリティ トークン

セキュリティ トークンについては、長いランダムな文字列を作成するだけです。

PDF は同じサーバー上でレンダリングされるため、トークンが公開されることはなく、十分なセキュリティが提供されます。

これがあなたにとって実用的なアイデアであることを願っています。

于 2011-02-03T17:35:29.820 に答える