Ir para conteúdo
Fórum Script Brasil
  • 0

Restrição em pasta "PHP"


binhofa

Pergunta

Olá pessoal,

Estou garimpando pra caramba e não estou conseguindo achar uma solução.

Seguinte:

Preciso alimentar meu server com pastas (cliente01, cliente02, cliente03....) e incluir arquivos dentro dela. Cada pasta precisa ter um acesso restrito onde o cliente01 não possa acessar o conteúdo do cliente02 e vice versa. O processo de criação dessa pasta deve ser fácil para um simples usuário administrador manuseá-la. Para acessar essa "area restrita", deve-se ter um link padrão pra todos (ex.: www.empresa.com.br/login), onde o login de cada um é o nome do próprio cliente (Ex....Login: cliente01).

alguém pode me ajudar? Ou alguém conhece algum sistema que faça esse tipo de procedimento?

Obrigado e fico no aguardo.

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

Olá pessoal.

Vou ser um pouco mais específico. Pra facilitar, separarei em tópicos:

- Tenho um sisteminha de login, onde o cliente vai digitar como login cliente01 e em seguida, a senha,

- Dentro do meu servidor, eu já tenho uma pasta chamada cliente01 com alguns arquivos, onde quando ele digitar o login e senha, vai direto "somente" para a pasta cliente01,

- Quando ele se conectar, listará todos os arquivos desta pasta para ser efetuado o download....

Só isso! E estou quebrando a cabeça.

OBS.: Dentro do servidor, há diversas pastas (cliente02, cliente03, cliente04....), mas o cliente só permite acessar a pasta do login digitado (Ex.: o login cliente01 não pode acessar a pasta cliente02 depois de logado)

Consegui deixar claro? Há como fazer isso?

Obrigado pessoal. Fico no aguardo.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Binhofa.

A maneira mais simples é criar permissões diretamente do banco. Por ex.:

O Administrador do seu sistema vai cadastrar ou o próprio usuário irá fazer o cadastro pelo site. Vamos pegar o Administrador como ator principal. Ao cadastrar o usuário: Nome, E-mail, Senha, Permissão ( onde conterá o nome da permissão. Ex.: Pasta1, ... ). Essa permissão ficará armazenado no banco. Quando o usuário acessar o sistema, você pode pegar a permissão armazenada e fazer o redirecionamento.

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Uma boa solução a do MTavares, já que agora fois especificado que cada cliente tem acesso a apenas alguns arquivos próprios de cada um...

Eu tentaria mesclar a solução dos diretórios não acessíveis (conforme o link que eu passei no POST lá em cima) juntamente com a idéia do MTavares. Pelo banco de dados, cada cliente teria especificado o nome dos documentos que podem ser acessados,fazendo uma relação com os nomes dos arquivos nas pastas, que poderiam estar com nomes codificados para dificultar o acesso por outras pessoas. Tipo um nome assim: "12ERT2YT1T2UYTJHG2B1MNB21KJH1IU2YOU12.DOC"

Pelo BD eu saberia que esse documento é de um determinado usuário.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal.

Pois então, é exatamente isso que estou com dificuldades. Sei que por BD isso ajudaria muito, mas não estou conseguindo achar um tutorial que explique esse procedimento. Eu até crio o sisteminha e tal, mas ele abre uma pasta para todos os usuários cadastrados. Gostaria de separar (Ex.: usuário e senha X, acessa pasta X..... o mesmo para o usuário Y).

Vocês me direcionariam um link para esse fim?

Valeu pessoal. Conto com a ajuda de vocês.

Link para o comentário
Compartilhar em outros sites

  • 0

Binhofa,

Naquele exmplo que eu te dei, você poderia fazer assim:

1. o cliente loga no sistema

2. o sistema vai ter o ID_CLIENTE em 'mãos'

3. você mostra para esse ID_CLIENTE somente os registros que ele tem acesso. No seu caso, mostra os arquivos através de uma tabela. você faz um select assim:

exemplo:

 select * from tabela_arquivos_cadastrados where id_acesso = $ID_CLIENTE 

onde o $ID_CLIENTE é a variável com o ID_CLIENTE

sua tabela teria que ter os seguintes campos

codigo - (tipo inteiro) chave primaria com auto increment

nome_arquivo (tipo varchar(100) )- nome do arquivo gravado no seu dominio ex: "12ERT2YT1T2UYTJHG2B1MNB21KJH1IU2YOU12.DOC" (um nome q seu sistema deu)

nome_legivel (tipo varchar(500) )- nome para mostar ao usuario : ex: "documento_contabil1.doc" ou qualquer coisa ex:" Lista de compras", porque o que importa é saber o q tem dentro

id_acesso (tipo inteiro)- id do usuário autorizado. ex: qualquer numero de usuario cadastrado no sistema

para mostrar os arquivos que o cliente pode ver:

select nome_arquivo, nome_legivel from tabela_arquivos_cadastrados where id_acesso=$ID_CLIENTE

e mostra assim:

< a href="pasta/<? echo $nome_arquivo;?>"><? echo $nome_legivel; ?></a>
Link para o comentário
Compartilhar em outros sites

  • 0

Sandro2011,

Muito obrigado pela ajuda, mas realmente não estou conseguindo entender. Pensei em uma forma que pode resolver (...pelo menos por enquanto) o meu problema. Usando SESSIONS, no inicio da index.php, quero que se o usuario/senha for X, entre na pasta X, mas ele está dando erro no comando IF. Segue o código:

____________________________________

<?
if ($usuarios = array('cliente_x' => 'teste');
{ header('location: pasta_x');}
if ($usuarios = array('cliente_y' => 'teste2');
{ header('location: pasta_y'); }
);
//verificacao de login e senha
if (isset($_POST['login']) && isset($_POST['senha'])) {
if (array_key_exists($_POST['login'], $usuarios)) {
if ($usuarios[$_POST['login']] == $_POST['senha']) {
session_start();
$_SESSION['s_login'] = $_POST['login'];
header('location: arquivos.php');
}
else { $erro = 'Senha incorreta.'; }
}
else { $erro = 'Login invalido.'; }
}
?>
<body>
<form method="post">
<table>
<tr><td>Usuario:</td><td width="148"><input type="text" name="login" /></td></tr>
<tr><td align="left">Senha:</td><td width="148"><input type="password" name="senha" /></td></tr>
<tr><td colspan="2">
<p align="center"><br /><input type="submit" value="Enviar" /></td></tr>
</table>
</form>
____________________________________

O que pode estar errado?

Obrigado pessoal.... Fico no aguardo.

Editado por binhofa
Link para o comentário
Compartilhar em outros sites

  • 0
<?
 
if ($usuarios = array('cliente_x' => 'teste'))
     { header('location: pasta_x');}
 
 
if ($usuarios = array('cliente_y' => 'teste2'))
     { header('location: pasta_y'); }
 

 
//verificacao de login e senha
if (isset($_POST['login']) && isset($_POST['senha'])) {
    if (array_key_exists($_POST['login'], $usuarios)) {
        if ($usuarios[$_POST['login']] == $_POST['senha']) {
            session_start();
            $_SESSION['s_login'] = $_POST['login'];
            header('location: arquivos.php');
        }
        else { $erro = 'Senha incorreta.'; }
    }
    else { $erro = 'Login invalido.'; }
}
?> 
 
<body>
<form method="post">
<table>
<tr><td>Usuario:</td><td width="148"><input type="text" name="login" /></td></tr>
<tr><td align="left">Senha:</td><td width="148"><input type="password" name="senha" /></td></tr>
<tr><td colspan="2">
<p align="center"><br /><input type="submit" value="Enviar" /></td></tr>
</table>
</form>

Arrumei os problemas com parenteses nesse codigo

Link para o comentário
Compartilhar em outros sites

  • 0
<?
 // definindo seus usuarios via array:
 $usuarios = array('cliente_x' => 'teste');
 $usuarios = array('cliente_y' => 'teste2')
 
 // definindo senhas usuarios via array:
 $usuarios['cliente_x']['key'] = 'senha';
 $usuarios['cliente_y']['key'] = 'senha2';

  // definindo pastas dos  usuarios via array:
 $usuarios['cliente_x']['pasta'] = 'pasta_x';
 $usuarios['cliente_y']['pasta'] = 'pasta_y';

 
if ($usuarios = array('cliente_x' => 'teste'))
     { header('location: pasta_x');}
 
 
if ($usuarios = array('cliente_y' => 'teste2'))
     { header('location: pasta_y'); }
 

 
//verificacao de login e senha
if (isset($_POST['login']) && isset($_POST['senha'])) {

    if (array_key_exists($_POST['login'], $usuarios)) { // se existe $_POST['login'] dentro de usuarios
        
        if ($usuarios[$_POST['login']['key'] == $_POST['senha']) {  // se a senha do usuario estiver correta, define a sessao
        
            session_start();
            $_SESSION['login'] = $_POST['login']; // guarda o login na sessao
            header('location:'. $usuarios[$_POST['login']]['pasta']);  // vai para a pasta
        }
        else { $erro = 'Senha incorreta.'; }
    }
    else { $erro = 'Login invalido.'; }
}
?>
 
<body>
<form method="POST" action="index.php">
<? if ($erro!='') echo $erro;?>
<table>
 <tr>
    <td>Usuario:</td>
    <td width="148"><input type="text" name="login" /></td>
 </tr>
 <tr>
    <td align="left">Senha:</td>
    <td width="148"><input type="password" name="senha" /></td>
 </tr>
 <tr>
    <td colspan="2">
        <p align="center"><br />
         <input type="submit" value="Enviar" />
        </p>
    </td>
 </tr>
</table>
</form>

Arrumei o código pra funcionar mas não testei.

Se der erro posta completo com o erro, pra analisar.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Sandro,

Tive que só corrigir alguns detalhes de virgula e colchete, mas tudo resolvido. O problema é que continua dando o mesmo erro. Ele está indo diretamente para a pasta_y.

_____________________________________________________________________________________________________________

<?
// definindo seus usuarios via array:
$usuarios = array('cliente_x' => 'teste');
$usuarios = array('cliente_y' => 'teste2');
// definindo senhas usuarios via array:
$usuarios['cliente_x']['key'] = 'senha';
$usuarios['cliente_y']['key'] = 'senha2';
// definindo pastas dos usuarios via array:
$usuarios['cliente_x']['pasta'] = 'pasta_x';
$usuarios['cliente_y']['pasta'] = 'pasta_y';
if ($usuarios = array('cliente_x' => 'teste'))
{ header('location: pasta_x');}
if ($usuarios = array('cliente_y' => 'teste2'))
{ header('location: pasta_y'); }
//verificacao de login e senha
if (isset($_POST['login']) && isset($_POST['senha'])) {
if (array_key_exists($_POST['login'], $usuarios)) { // se existe $_POST['login'] dentro de usuarios
if ($usuarios($_POST['login']['key'] == $_POST['senha'])) { // se a senha do usuario estiver correta, define a sessao
session_start();
$_SESSION['login'] = $_POST['login']; // guarda o login na sessao
header('location:'. $usuarios[$_POST['login']]['pasta']); // vai para a pasta
}
else { $erro = 'Senha incorreta.'; }
}
else { $erro = 'Login invalido.'; }
}
?>
<body>
<form method="POST" action="index.php">
<? if ($erro!='') echo $erro;?>
<table>
<tr>
<td>Usuario:</td>
<td width="148"><input type="text" name="login" /></td>
</tr>
<tr>
<td align="left">Senha:</td>
<td width="148"><input type="password" name="senha" /></td>
</tr>
<tr>
<td colspan="2">
<p align="center"><br />
<input type="submit" value="Enviar" />
</p>
</td>
</tr>
</table>
</form>
_____________________________________________________________________________________________________________

O que pode ser agora?

Valeu... fico no aguardo!

Editado por binhofa
Link para o comentário
Compartilhar em outros sites

  • 0
<?
 // definindo usuarios, senhas e pastas via array:
$usuarios = array(
	"cliente_x" => array("key" => "senha","pasta" => "pasta_x"),
	"cliente_y" => array("key" => "senha2","pasta" => "pasta_y")
);

 
//verificacao de login e senha
if (isset($_POST['login']) && isset($_POST['senha'])) {
 
    if (array_key_exists($_POST['login'], $usuarios)) { // se existe $_POST['login'] dentro de usuarios

        if ($usuarios[$_POST['login']]['key'] == $_POST['senha']) {  // se a senha do usuario estiver correta, define a sessao
        
            session_start();
            $_SESSION['login'] = $_POST['login']; // guarda o login na sessao
            header('location:'. $usuarios[$_POST['login']]['pasta']);  // vai para a pasta
        }
        else { $erro = 'Senha incorreta.'; }
    }
    else { $erro = 'Login invalido.'; }
}
?>
 
<body>
<form method="POST" action="testes.php">
<? if ($erro!='') echo $erro;?>
<table>
 <tr>
    <td>Usuario:</td>
    <td width="148"><input type="text" name="login" /></td>
 </tr>
 <tr>
    <td align="left">Senha:</td>
    <td width="148"><input type="password" name="senha" /></td>
 </tr>
 <tr>
    <td colspan="2">
        <p align="center"><br />
         <input type="submit" value="Enviar" />
        </p>
    </td>
 </tr>
</table>
</form>

Caramba, sou uma negação em array. Corrigi tudo. Agora está funcionando!

Link para o comentário
Compartilhar em outros sites

  • 0

AEEEEEEEEEEEEE.... :D :D :D :D :D ... Muito bom Sandro!!!! Parabéns. Tive que fazer um ajuste, retirando o "action=testes.php" e funfou!!!

Agora só mais um detalhe pra ficar perfeito: Quando eu digito o login e senha do cliente_x, o endereço fica www.nomedosite.com.br/cliente_x/arquivos/index.php. Como faço para o endereço ficar assim: www.nomedosite.com.br/asdTsklw90jM (ele cria automaticamente um outro nome, escondendo a pasta do cliente), e tendo o mesmo efeito de como se estivesse na pasta?

Nossa, vai me ajudar muito se isso der certo.

Fico no aguardo. Obrigado mais uma vez!!!!!!!!!!!! ;) ;) :) :) ;)

Link para o comentário
Compartilhar em outros sites

  • 0

Boa tarde Binhofa,

cara, aí o negócio pega pro meu lado... não sei nada de URL amigáveis. Isso já é coisa de configuração do arquivo .htaccess que deve ser colocado na raiz do seu site para a URL mudar de nome...

procura sobre URL AMIGAVEL no google, e se achar algo que funcione contigo põe aí pra mim please!

Valeu :)

Link para o comentário
Compartilhar em outros sites

  • 0

Pessoal, ainda estou descobrindo como faz para mudar a URL, mas ainda não consegui sucesso.

Naquele script, estou tendo um problema com o LOGOFF. Ele não está destruindo a sessão. Seguem os códigos:

__________________________________________________________________________________________________________

INDEX.PHP (na raiz)

<?
include("users.php");
//verificação de login e senha
if (isset($_POST['login']) && isset($_POST['senha'])) {
if (array_key_exists($_POST['login'], $usuarios)) {
if ($usuarios[$_POST['login']]['key'] == $_POST['senha']){
session_start();
$_SESSION['s_login'] = $_POST['login'];
header('location:'. $usuarios[$_POST['login']]['pasta']); // vai para a pasta
}
else { $erro = 'Senha incorreta.'; }
}
else { $erro = 'Login inválido.'; }
}
?>
<body>
<form method="post">
<div align="center">
<table border="0" cellspacing="0" cellpadding="0">
<tr><td align="left"><b><font face="Verdana" size="2">Login:&nbsp;&nbsp;&nbsp;&nbsp;
</font></b></td><td width="148"><input type="text" name="login" /></td></tr>
<tr><td align="left"><b><font size="2" face="Verdana">Senha:&nbsp;&nbsp;&nbsp;&nbsp;
</font></b></td><td width="148"><input type="password" name="senha" /></td></tr>
<tr><td colspan="2">
<p align="center"><br /><font color="#FFFFFF"><input type="submit" value="Enviar" /></font><p align="center">&nbsp;</td></tr>
</table>
</div>
</form>
__________________________________________________________________________________________________________
Se o login foi joao, será encaminhada para a pasta www.dominio.com.br/pasta/joao/arquivos.php
__________________________________________________________________________________________________________
LOGOFF.PHP (na raiz)
<?php
session_start();
$_SESSION = array();
unset($_SESSION);
session_destroy();
header("Location: index.php");
?>
__________________________________________________________________________________________________________
Ele volta para o index.php, solicitando Usuario e senha normalmente, mas quando copio o endereço www.dominio.com.br/pasta/joao/arquivos.php, eu consigo ver normalmente o conteúdo
alguém pode me ajudar? O que pode ser?

Obrigado mais uma vez e fico no aguardo.

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui........... :D

Fiz assim:

______________________________________________________________________________________________________________

INDEX.PHP

<?
session_start();
include("users.php");
//verificação de login e senha
if (isset($_POST['login']) && isset($_POST['senha'])) {
if (array_key_exists($_POST['login'], $usuarios)) {
if ($usuarios[$_POST['login']]['key'] == $_POST['senha']){
session_start();
$_SESSION['s_login'] = $_POST['login'];
header('location:'. $usuarios[$_POST['login']]['pasta']); // vai para a pasta
}
else { $erro = 'Senha incorreta.'; }
}
else { $erro = 'Login inválido.'; }
}
?>
<body background="images/fundo.jpg" style="background-attachment: fixed">
<form method="post">
<div align="center">
<table border="0" cellspacing="0" cellpadding="0">
<tr><td align="left"><b><font face="Verdana" size="2">Login:&nbsp;&nbsp;&nbsp;&nbsp;
</font></b></td><td width="148"><input type="text" name="login" /></td></tr>
<tr><td align="left"><b><font size="2" face="Verdana">Senha:&nbsp;&nbsp;&nbsp;&nbsp;
</font></b></td><td width="148"><input type="password" name="senha" /></td></tr>
<tr><td colspan="2">
<p align="center"><br /><font color="#FFFFFF"><input type="submit" value="Enviar" /></font><p align="center">&nbsp;</td></tr>
</table>
</div>
</form>

______________________________________________________________________________________________________________

ARQUIVOS.PHP (em outra pasta)

<?
session_start();
if (!$_SESSION["s_login"])
{
header('Location: ../index.php');
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Language" content="pt-br">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
</head>
<body>
<p>Está logado<a href="logoff.php"><br><br>Sair</a></p>
</body>
</html>

______________________________________________________________________________________________________________

LOGOFF.PHP (Na mesma pasta do Arquivos.php)

<?
session_start();
$_SESSION = array();
if(isset($_COOKIE[s_login])){
setcookie(s_login, '', time() - 1000, '/');
}
session_destroy();
header("Location: ../index.php");

?>

______________________________________________________________________________________________________________

Vale lembrar que há um INCLUDE de usuario e senha senao ele não valida

USERS.PHP (na mesma pasta de arquivos.php)

<?
$usuarios = array(
"usuario_a" => array("key" => "senha_a","pasta" => "pasta01/arquivos.php"),
"usuario_b" => array("key" => "senha_b","pasta" => "pasta02/arquivos.php"),
);
?>
________________________________________________________________________________________________________
Espero ter ajudado de alguma forma alguém. Ainda estou na caça da URL amigável, que nada mais é do que criptografar a URL.... (Ex.: a pasta www.dominio.com.br/pasta01/arquivos.php deve-se transformar em www.dominio.com.br/wdfgAGHRTY56y). Alguém descobriu?
Abraços gente.
Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal, tudo bem?

Posso pedir a ajuda de vocês novamente? Segue meu código:

________________________________________________________________

USERS.PHP

<?
$usuarios = array(
"usuario_a" => array("key" => "senha_a","pasta" => "pasta01/arquivos.php"),
"usuario_b" => array("key" => "senha_b","pasta" => "pasta02/arquivos.php"),
);
?>
_______________________________________________________________________________________________
Minha duvida: Como faço para, quando o usuário criar no botão "MANUTENCAO.PHP" ele me fornece somente os campos de Usuário, Senha e Pasta para fazer uma busca e efetuar as alterações......... Algo do tipo:
______________________________________________________________________________________________
MANUTENCAO.PHP (Ficticio)
Localize pelo usuário: <aqui ele digita em uma textbox>
Se localizou:
Senha: <aqui ALTERA a senha>
Pasta: <aqui ALTERA o caminho da pasta>
Salvar alterações
Se NÃO localizou:
Senha: <aqui CADASTRA uma senha>
Pasta: <aqui CADASTRA um direcionamento para uma pasta>
Criar novo login
______________________________________________________________________________________________
O meu arquivo USERS.PHP ficará assim (se caso for um novo login):

________________________________________________________________

USERS.PHP

<?
$usuarios = array(
"usuario_a" => array("key" => "senha_a","pasta" => "pasta01/arquivos.php"),
"usuario_b" => array("key" => "senha_b","pasta" => "pasta02/arquivos.php"),
"usuario_c" => array("key" => "senha_c","pasta" => "pasta03/arquivos.php"),
);
?>
_______________________________________________________________________________________________
Obrigado e fico no aguardo. Valeu galera!!!!!
:D
Editado por binhofa
Link para o comentário
Compartilhar em outros sites

  • 0

Nossa,

Você pode partir para uma solução via leitura e reescrita do script PHP, que é um arquivo do tipo texto... Teria de buscar as strings e modificar através de funções do tipo

substr, str_replace, etc...

Ou implementar um BD para cuidar do armazenamento dos usuários..

Link para o comentário
Compartilhar em outros sites

  • 0

Veja um exemplo com arquivo texto:

http://codigofonte.uol.com.br/codigos/criar-escrever-e-fechar-um-arquivo-de-texto-txt

Nesse caso, seu arquivo de texto seria o arquivo .php. Mas toma cuidado para não apagá-lo. cria uma copia de segurança.

Você colocaria todo o script em uma variável, e dentro desta variável você faz as buscas e substituições com as funções de string que o PHP tem.

No google você acha muito exemplo disso

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...