Autor Tópico: [RESOLVIDO] Login com Multi-Empresas  (Lida 2346 vezes)

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
[RESOLVIDO] Login com Multi-Empresas
« Online: Junho 02, 2013, 07:59:54 pm »
Olá pessoal, estou com uma pequena dúvida, é o seguinte:

Estou fazendo um sistema Multi-Empresas, nesse caso seria (Matriz_x_Filial) não empresas distintas.
O que o sistema tem que controlar é, verificar se o usuário ao logar, esta cadastrado na empresa onde escolheu ao logar através de um select.

Eu criei no app_login, a seguinte lógica e apliquei no onValidate:

Código: [Selecionar]
$sql = "SELECT login FROM unid_x_user WHERE idunidade = {unid}";
sc_lookup(rs, $sql);
if({rs} !== {login} )
{
sc_error_message("Desculpe, mas o usuário não tem permissão de acesso a essa Unidade.");
sc_error_exit();

}
else
{

//Não faz nada!  Loga no sistema!

}

o {unid} é um campo que criei para o usuário escolher a Matriz ou Filial. É apenas um campo select.
o {login} é de uma tabela chamada unid_x_login  onde é um N - N. (Muitos para Muitos).

A princípio o código esta correto, mas na prática o sistema responde sem lógica. Por exemplo! Ao escolher a Unidade "1", e na tabela unid_x_login as informações realmente for verdadeira ex:(login = "admin" | unid = "1") ele mesmo assim mostra a condição else ex:(Desculpe, mas o usuário não tem permissão de acesso a essa Unidade).

Alguém pode opinar o que pode esta ocorrendo? É como se o laço não funcionasse mesmo estando correto logicamente.

Abraço a todos!
« Última modificação: Junho 04, 2013, 08:57:20 am por FredKeyster »
F. A.
Analista de Sistemas

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Login com Multi-Empresas
« Responder #1 Online: Junho 03, 2013, 12:42:57 am »
Pessoal se alguém poder testar isso em um BLANK agradeço. Pois o resultado é totalmente contraditório ao código proposto.

Nome da tabela do BD:  unid_x_user.
Valores:
idunidade = 1
login = admin
//---------------------------------


Código: [Selecionar]
$unidade = '1';
$login = "admin";

$sql = "SELECT login FROM unid_x_user WHERE idunidade = '$unidade'";
sc_select(rs, $sql);
if({rs} == $login)
{
echo 'Ok';
}
else
{
      echo 'Erro!';

}

Resultado = "Erro!"
F. A.
Analista de Sistemas

jovitomelo

  • Global Moderator
  • Expert
  • *****
  • Mensagens: 916
    • Simples Assim
    • Email
Re:Login com Multi-Empresas
« Responder #2 Online: Junho 03, 2013, 01:39:48 am »
FredKeyster,

Existem muitas causas para a exibição desta mensagem (que necessariamente não é um Erro). O que você deve fazer é habilitar o modo Debug para verificar se existe realmente um ERRO.

Forte abraço.
Jovito Melo
Maceió - Alagoas

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Login com Multi-Empresas
« Responder #3 Online: Junho 03, 2013, 05:57:11 am »
Fred,
Existem dois problemas no teu codigo.
Primeiro o sql ira retornar todos os logins de uma empresa, nao apenas 1 para testar.
Segundo, a variavel rs é um array. Vc deveria testá-la assim: {rs[0][0]}==algumacoisa

Tente fazer assim:

$sql = "SELECT login FROM unid_x_user WHERE idunidade = {unid} and login={login}";
sc_lookup(rs, $sql);
if(!isset({rs[0][0]} )
{
   sc_error_message("Desculpe, mas o usuário não tem permissão de acesso a essa Unidade.");
   sc_error_exit();

}
else
{   

   //Não faz nada!  Loga no sistema!

}
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Login com Multi-Empresas
« Responder #4 Online: Junho 03, 2013, 11:10:56 am »
Citar
Primeiro o sql ira retornar todos os logins de uma empresa, nao apenas 1 para testar.

Verdade Allan, eu fiz assim no Blank:

{unid}='2';
{login} = "Fred";

$check_sql = "SELECT login FROM unid_x_user WHERE idunidade = '{unid}' AND login = '{login}' ";
sc_lookup(rs, $check_sql);

if ({rs[0][0]} == {login})     // Row found
{
   
   sc_error_message("Legal!");
   sc_error_exit();
   
   
}
      else     // No row found
{
   sc_error_message("Erro!");
   sc_error_exit();
}

Mas quando jogo na aplicação da um erro de página!

Citar
Erro no servidor
O site encontrou um erro ao recuperar http://macroerp.com.br/scriptcase7/app/MacroERP/app_login/app_Login.php?nmgp_outra_jan=true&script_case_session=vs5fuafr2l510bmejkdcco26t3&286. Ele pode estar em manutenção ou configurado incorretamente.
Veja algumas sugestões:
Recarregue esta página da web mais tarde.
Erro HTTP {500 (Internal Server Error): Ocorreu uma condição inesperada enquanto o servidor tentava completar a solicitação.

Com o (!isset...)  não deu certo no Blank, da o erro acima, mas sem ele ele funfa legal, mas quando eu jogo na aplicação da o erro acima.
« Última modificação: Junho 04, 2013, 09:00:34 am por FredKeyster »
F. A.
Analista de Sistemas

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Login com Multi-Empresas
« Responder #5 Online: Junho 03, 2013, 02:42:20 pm »
Fred,
Tem um erro no script que te passei. Faltou um perenteses.
if (isset({rs[0][0]})) {

Não acho que essa mensagem de erro seja devido ao código da aplicação.
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Login com Multi-Empresas
« Responder #6 Online: Junho 03, 2013, 06:27:44 pm »
Allan eu tinha percebido isso, hehe...  mesmo assim não esta funcionando a lógica, você pode testar no blank e verá que ele faz ao contrário do que a lógica se refere, é isso que estou encucado.

Jovito ja fiz o debug, o mesmo não mostra nada relacionado a "erro"  apenas mostra os select's corretamente.

Mais alguma sugestão?
« Última modificação: Junho 03, 2013, 08:28:35 pm por FredKeyster »
F. A.
Analista de Sistemas

Allan Medeiros

  • Expert
  • *****
  • Mensagens: 504
    • Email
Re:Login com Multi-Empresas
« Responder #7 Online: Junho 03, 2013, 08:26:30 pm »
Fred,
Fiz o teste aqui em uma aplicação blank e funcionou, inclusive com o !isset.
Quanto ao erro http 500, não sei o que está causando.
Boa sorte
Allan Medeiros
Analista de Informática
__________________________________________
Companhia de Processamento de Dados da Paraíba
medeiros@codata.pb.gov.br

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Login com Multi-Empresas
« Responder #8 Online: Junho 03, 2013, 08:44:20 pm »
Pois é Allan, no Blank funfa legal, mas na App não! Estou estudando o que pode ser. Mesmo assim muito obrigado pela ajuda irmão!
Abraços!
F. A.
Analista de Sistemas

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:Login com Multi-Empresas
« Responder #9 Online: Junho 04, 2013, 08:55:27 am »
Bem, como tava dando muito problema...

Resolvi fazer de outra maneira e deu certo.

Criei um evento ajax, onde aparecerá no check box apenas as empresas que o usuário tiver permissão de acesso.
Resolveu de boa!

Obrigado pessoal!
F. A.
Analista de Sistemas

joeltonsilva

  • Avançado
  • ****
  • Mensagens: 360
Re:Login com Multi-Empresas
« Responder #10 Online: Setembro 19, 2013, 08:56:38 pm »
Bem, como tava dando muito problema...

Resolvi fazer de outra maneira e deu certo.

Criei um evento ajax, onde aparecerá no check box apenas as empresas que o usuário tiver permissão de acesso.
Resolveu de boa!

Obrigado pessoal!

Como você fez isto?

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:[RESOLVIDO] Login com Multi-Empresas
« Responder #11 Online: Setembro 20, 2013, 12:35:30 pm »
Na aplicação login crie um campo virtual do tipo "select". Nele atribua o evento ajax do tipo "onChange" Atribua o onChange ao campo "usuário", pois é através do nome do usuário que o sistema vai verificar a que unidades (empresas) o mesmo pertence. No evento coloque um "Select" onde vai pesquisar quais empresas ele esta permitido para acessar, sendo assim só vai aparecer as empresas no select que ele tiver permissão de acesso.

Exemplo:

http://macroerp.com.br/01/app_Login/app_Login.php

se vc colocar no usuário "Admin" aparecerá 2 empresas
Se colocar "Fred"  aparecerá uma empresa.
F. A.
Analista de Sistemas

joeltonsilva

  • Avançado
  • ****
  • Mensagens: 360
Re:[RESOLVIDO] Login com Multi-Empresas
« Responder #12 Online: Setembro 20, 2013, 03:07:26 pm »
Na aplicação login crie um campo virtual do tipo "select". Nele atribua o evento ajax do tipo "onChange" Atribua o onChange ao campo "usuário", pois é através do nome do usuário que o sistema vai verificar a que unidades (empresas) o mesmo pertence. No evento coloque um "Select" onde vai pesquisar quais empresas ele esta permitido para acessar, sendo assim só vai aparecer as empresas no select que ele tiver permissão de acesso.

Exemplo:

http://macroerp.com.br/01/app_Login/app_Login.php

se vc colocar no usuário "Admin" aparecerá 2 empresas
Se colocar "Fred"  aparecerá uma empresa.

Agradeço sua atenção, mas eu me expressei errado...foi mal... eu quase desfalecendo é como eu posso forçar as aplicações abrirem somente para aquela empresa escolhida, por exemplo:
- Escolhi a empresa A(quem tem a ID 1);
- Abro a aplicação de  formulário que vou incluir funcionário nesta empresa A, mas que não apareça outras empresas, somente esta que foi informada no login, pelo que percebi tornou-se em uma variável global.

Me informa como que posso filtrar na aplicação usando a variável global, como realizo este filtro, poderia por favor me dá um exemplo com o código? Agradeço muito sua atenção amigo!

FredKeyster

  • Expert
  • *****
  • Mensagens: 1702
  • DEWENNINMEN
    • Email
Re:[RESOLVIDO] Login com Multi-Empresas
« Responder #13 Online: Setembro 20, 2013, 03:49:41 pm »
Mas é bem simples! É só você criar uma tabela  N:N relações Ex: "unid_x_user"  onde cada usuário poderá ter acesso as empresas que lhe pertence.

Depois no evento ajax coloque um select puxando (filtrando) as informações do usuário.
Exemplo:

Código: [Selecionar]
$_sql = 'SELECT idunidade'
           . ' FROM unid_x_user'
           . ' WHERE login = "'.{login}.'"';

sc_lookup(ds, $_sql);

if (isset({ds[0][0]}))     // Encoutrou
{
   if ({ds[0][0]} != 0)     // Todas as empresas
 {

 
{unid} = {ds[0][0]};
 }else{
 
sc_error_message("Erro");
sc_error_exit();

}
}


Depois no campo do tipo select filtre a variável global.
Ex:

Código: [Selecionar]
SELECT DISTINCT unidade.idunidade , unidade.unidade
FROM unid_x_user
INNER JOIN unidade ON unidade.idunidade = unid_x_user.idunidade
 WHERE login = '{login}'
ORDER BY unidade

F. A.
Analista de Sistemas