Acesso a Arquivos somente após logado

Bom dia,

Tenho o seguinte problema, possuo em minha aplicação com uma pasta que contem arquivos do tipo imagem. Os seguintes arquivos poderão somente ser acessados se o usuário estiver logado na aplicação.

Minha duvida é como fazer isto?

Alguém poderia indicar a melhor forma para resolver isto.

Algo como:

controller files

method download($id)

faça o controle de acesso para o método usando um filter ou algo parecido

deixe os arquivos em uma pasta protegida (.htaccess ou fora do public_html)

no método faça algo como:




//se vc guarda no db

$model=MeusArquivos::model()->findByPk($id);

$file=$model->arquivo_path;

//ou busque no diretorio 

$file=MEU_CAMINHO_PARA_ARQUIVOS.DIRECTORY_SEPARATOR.$id;

//ou como for


//usando método xSendFile do Yii para enviar

Yii::app()->request->xSendFile($file);

Algo assim

Então gustavo o problema não esta no envio, e sim, no momento de requisição de uma imagem, por exemplo

htt p: //ww w.meusite. com/images/empresa1/1.jpg

a idéia seria que a imagem 1 como na url acima só pudesse ser visualizada por usuários logados na aplicação

na empresa 1.

Tentei fazer .htaccess para quando o usuario fizer uma requisição a esta pasta, redireciono a um verifica.php

onde verifico se o usuário esta logado e pertence a empresa… se ele não esta logado consigo redireciona-lo a tela de login, porem se ele esta logado se eu nao redireciono para nenhum lugar ele continua no verifica.php e se eu tento redirecionar para a imagem, ele novamente cai no verifica, assim, entrando em loop

Att

então não redireciona, faz o arquivo verifica.php enviar a imagem direto para o browser como o Gustavo explicou

Programador é uma desgraça mesmo. Sempre faz coisas absurdas pra tarefas simples :)

Eu fiz isso usando stream na mão por não conhecer este recurso no FW. Vlw por compartilhar, vou mudar pra esta solução, que é absurdamente mais simples

O método Yii::app()->request->xSendFile($file); é utilizado para fazer download do arquivo, não realmente isto que estou precisando, o que preciso é apenas de um bloqueio pra visualização da imagem no browser que o usuário consiga visualizar a imagem pelo browser somente se estiver logado no sistema.

talvez de pra mudar o reader, e não fazer download, só mostrar.

editado.

Da sim, olha a doc da função.

http://www.yiiframework.com/doc/api/1.1/CHttpRequest#xSendFile-detail

ou faça algo como




// ao inves de Yii::app()->request->xSendFile($file);

header('Content-Type:'.CFileHelper::getMimeType($file));

echo file_get_contents($file);