Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

marsolim

Limitar visualização de conteúdo por usuário

Recommended Posts

salve galera tudo nos conformios? estou com uma dúvida para a qual venho pedir dicas e opiniões. seguinte estou criando um site que será acessado por alguns usuários que terão seus conteúdos próprios e queria uma forma de um não poder ver as imagens, vídeos, arquivos, etc dos outros. seria algo tipo facebook aonde uma imagem pode ser definida como privada. já que citei om facebook, como ele controla isso? alguem sabe? será unicamente no rewrite do htaccess? será incluindo os arquivos em blob no banco de dados? essa segunda opção não me apraz porque logicamente o banco ficaria gigantesco. como seria a forma mais eficaz?

 

agradeço pelas dicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos separar por partes, para limitar o conteúdo que o cara vai ver é algum parâmetro em banco

 

Permissão

Publico - Todos visualizam

Privado - Apenas o proprietário visualiza

Amigos - ... etc

 

É o famoso "if" no código

if($publico)
{
    echo "Conteúdo"
}
elseif($privado and $usuaricriador = $usuarioLogado)
{
    echo "Conteúdo"
}
else
{
    echo "conteúdo indisponível"
} 

Você já possui uma estrutura de Banco? talvez seja nessa parte que tenha que estudar para verificar onde vai persistir os dados de permissão.

 

Em armazenar imagens em bancos, existem alguns tópicos sobre esse assunto no fórum, mas resumindo o custo de redundância e escalonamento de um servidor de banco é maior que de um servidor de aplicação, então em miúdos prefira manter os arquivos na aplicação com nomes não amigáveis, e sem listar arquivos do diretório.

 

Acredito que o htaccess e rewrite não sejam necessários para essa função, apenas para os bloqueios de listagem dos diretórios.

 

Ou colocar a imagem física em um local fora da pasta que não acesse via http e busque via servidor e retorne em base64

Compartilhar este post


Link para o post
Compartilhar em outros sites

em primeiro lugar agradeço a todos por participar.

 

Lucas Guima eu sempre passo umas horas e por vezes dias pesquisando antes de postar. inclusive vai fazer dois anos que me inscrevi no forum e só postei 3 perguntas contando essa desse tópico mas já postei dezenas de respostas a perguntas de outros membros. nesses quase dois anos foram incontaveis as vezes que resolvi dúvidas apenas pesquisando no forum e no famoso google :P mas tem momentos que a gente não encontra as vezes por não saber os termos corretos para usar na pesquisa. dessa vez mesmo pesquisei no forum e no google usando termos em português e em inglês mas não consegui nada alem do que eu já imaginava.

 

Danilo Soncini, essa parte de liberar o acesso ao conteúdo tendo por base as permissões no cadastro do banco de dados é tranquilo. a minha dúvida mesmo é como as redes sociais como o face fazem para um usuário não ter acesso externo ou via browser ao conteúdo privado de outro usuário mais especificamente imagens, vídeos e arquivos. eu queria entender o processo para ver se consigo fazer parecido. o que eu tenho em mente a princípio é cadastrar todos os caminhos desses arquivos no banco de dados. algo do tipo:

 

id | iduser | pasta | nomearquivo

 

ou ainda nem precisa cadastrar no banco. se eu programar para os arquivos serem salvos com um prefixo que seja a id do usuário posso usar o prefixo para carregar as imagens apenas desse usuário por exemplo na página. com isso posso colocar na página os links apenas para o conteúdo cadastrado pelo usuário. e para evitar que outros usuários consigam acessar pela barra de endereço do browser digitando por exemplo www.site.com.br/pasta/imagem.jpg ou que conseguissem abrir a imagem externamente em outro site eu usaria o htaccess. tenho em mente ainda bloquear acesso direto as pastas do site ou seja só poderá acessar via uma página index. ainda outra coisa que tenho em mente é trocar o nome do arquivo por um md5 por exemplo.

 

uma última pergunta, vocês acham mais prático criar uma pasta para cada usuário ou deixar tudo em uma pasta só com a identificação do usuário? por exemplo: iduser_nomearquivo.ext

 

agradeço mais uma vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fernando C agradeço pela resposta mas não é esse o caso. as seções não são segredo para mim.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com Sessions você faz tudo isso.

 

Só atribuir uma verificação simples de algoritmo.

 

Em todo conteúdo, você terá que cadastrar a quem pertence.

se (id do dono do conteudo == id da sessao)
    libera a visualização
senao
    não mostra nada, ou algum outro conteudo generico para todos.

Agora se a pessoa tiver a URL final da imagem exclusiva, por ex. não há o que ser feito.

Mesmo no Facebook, se a imagem estiver privada, ela copia a URL dela e passa pra alguem, ela verá normalmente o JPG.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Maykel como eu falei essa parada de liberar por sessions para visualização dentro da página é tranquilo, isso não é segredo para mim. a questão é exatamente abrir o arquivo externamente pela url no navegador ou a partir de outro site nos chamados hot links. eu já bloqueio isso usando htaccess. o que eu queria saber é se alguém conhece algum outro método para fazer esse bloqueio.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acredito que só por htaccess e se estes arquivos estiverem em diretórios separados por usuario, por exemplo. Dessa maneira, travaria o acesso ao diretório com determinado ID.

 

Mas na prática não sei nem se é possível, mas se você diz q já fez, até gostaria de saber como foi feito!

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu uso em um nível anterior ao public_html para funcionar para todas as pastas e subpastas um arquivo .htaccess com os parâmetros abaixo que eu comentei para saber o que faz o que:

# bloqueia acesso ao diretório pela
# barra de endereços do browser
Options All -Indexes

# ativa a sobrescrita de url
RewriteEngine on

# define o site dentro de onde uma página
# pode acessar os arquivos bloqueados
RewriteCond %{HTTP_REFERER} !^http://(.+.)?site.com.br/ [NC]

# define as extensões que serão bloqueadas para
# acesso externo e direciona para a página index.html
RewriteRule .*.(jpg|png|gif|zip|rar|exe)$ index.html [L]

# abre uma página de erro personalizada
ErrorDocument 403 /403.html

# abre uma página de documento
# não encontrado personalizada
ErrorDocument 404 /404.html

claro que isso tudo tem que estar habilitado no php.ini. geralmente os hosts já tem isso habilitado. na primeira linha desse .htacess eu bloqueio acesso ao diretório que não tiver uma página index. se a pessoa tentar acessar o diretório dará um erro 303. então tenho um parâmetro que abre uma página personalizada ao invés de exibir o erro padrão. nas outas linhas defino que só o site aonde está tudo isso pode ter páginas que acessam os arquivos bloqueados e defino as extensões bloqueadas. se alguém digitar na barra de endereço http://www.site.com.br/imagem.jpg ou colocar isso em um link dentro de outro site (hot link) ele será direcionado para a página index.html e não será exibida a imagem mesmo que ele exista. isso também bloqueia download de arquivos pela barra de endereços. se eu tenho um arquivo de nome arquivo.rar e a pessoa digitar www.site.com.br/arquivo.rar na barra de endereços também será direcionado para index.html e não será feito o download.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como ele controla isso? alguem sabe?

não sei qual é a estratégia exata que eles usam, porém consigo imaginar formas de fazer.

 

 

será unicamente no rewrite do htaccess?

certamente não.

 

será incluindo os arquivos em blob no banco de dados?

também não.

 

Você terá que fazer esse controle programaticamente.

Imagine os estados:

-> Pode ser público

-> Pode ser privado

 

Okay ? Considere uma delas como "padrão" (default). Peguemos o estado público como padrão.

Sempre que algo tiver que ser exibido, seja por URL direta ou no meio de alguma outra listagem, vc terá que verificar em um banco de dados, quais as condições de exibição daquele conteúdo.

 

Se for público, não terá nada no banco.

Se for privado, vc terá o ID de quem pode visualizar. Seus usuários estão sempre logados.

Verifique se o usuário atual na sessão possui acesso aquele conteúdo, fazendo uma busca no banco.

 

Quanto a URL direta, sempre que algo for privado, impeça de ser exibido, por você não conseguir saber quem é que está tentando ver. (caso não haja uma sessão aberta).

Compartilhar este post


Link para o post
Compartilhar em outros sites

William Bruno agradeço pela resposta mas como eu disse o controle dentro do site usando sessões, cookies e o banco de dados é tranquilo. isso para mim não é segredo. a questão que me ronda se trata apenas sobre a abertura ou download de arquios digitando a url na barra de endereços como por exemplo www.site.com.br/imagem.jpg ou www.site.com.br/arquivo.zip mas para isso também já tenho alguns macetes como bloquear acesso direito ao diretório colocando uma página index nele e usando -indexes no htaccess alem de usar outros truques (veja o exemplo de htaccess que postei anteriormente). só queria mesmo ver se alguém sabia de outros truques para esse bloqueio de acesso externo a imagens, vídeos e outros arquivos como zip e exe. mas acho que é só isso que já uso mesmo.

 

de qualquer forma agradeço a todos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.