Login com liberação de acesso às aplicações...

Para inaugurar esta parte do forum, vamos ao login… o início de qualquer sistema… eu costumo usar esse padrão… espero que possa ajudar alguém… pois é um dos assuntos que mais procurei no início e sempre tem alguém com dúvida!!

Crie uma aplicação tipo CONTROLE, nela crie doi campos (LOGIN E SENHA)!!

No evento “ONVALIDATE”, coloque o seguinte código (para buscar na sua tabela de usuários se o login existe!!):

//INICIO LOGIN
sc_reset_apl_status();
sc_reset_apl_conf();

sc_lookup(dslogin,“Select usrcodigo, usrnome from tb_usuarios where usrlogin=’{loglogin}’ and usrsenha=’{logsenha}’”);

if(empty({dslogin})) {
sc_error_message(“Login ou Senha inválido.”);
}else{
sc_apl_status(‘mnu_principal’,‘on’); //“destrava” o menu principal para o usuário logado
sc_apl_status(‘cns_usuarios_fil’,‘on’); //“destrava” a consulta de usuários para o usuário logado
sc_apl_status(‘frm_usuarios’,‘on’); //“destrava” o cadastro de usuários para o usuário logado
sc_apl_status(‘frm_parametros’,‘on’); //“destrava” os parametros para o usuário logado
}
//FIM LOGIN

Esse "sc_apl_status(’…’,‘on’); " habilita as aplicações para que o usuário consiga acessá-los… pois, em cada APLICAÇÃO, APLICAÇÃO -> CONFIGURAÇÃO, você pode marcar a opção “usar segurança” assim ninguem consegue acessar a APLICAÇÃO diretamente (sem logar), pois é apenas no “ONVALIDATE” do login que essas aplicações serão “liberadas”.
Se o usuário tentar usar direto a aplicação sem ter passado pela tela de Login… ele não permite o acesso!!
Também é possível habilitar a segurança nas aplicações pela ferramenta chamada “Edição Expressa” e habilitar a segurança para todas as aplicações (exceto o Login) de uma única vez.

Estudando o codigo do login acima, dá pra controlar também oq cada usuário pode acessar!

Eu costumo fazer como voce, mas gosto de ter 1 tabela com os niveis de acesso e cadastro tambem as aplicacoes em outra tabela pra fazer relacionamento de n:m. Assim da pra fazer um sistema dinamico com as permissoes de cada grupo.
Tambem comparo a senha com md5, pois eu guardo criptografado no banco.

Exemplo do codigo abaixo:

sc_reset_apl_status();

sc_lookup(dataset, “SELECT login, passwd, systemUserId, accessLevelId from systemUser where login = ‘{login}’”);

if(!isset({dataset[0][0]}))
{
sc_error_message({lang_login_failed});
sc_error_exit();
}else
{
$senha_teste = md5({password});
if ($senha_teste != {dataset[0][1]})
{
sc_error_message({lang_login_failed});
sc_error_exit();
}

sc_lookup(rs, “SELECT applicationId FROM accessLevel_x_applications WHERE accessLevelId = '”.{dataset[0][3]} . “’”);

if(isset({rs[0][0]}))
{
foreach({rs} as $apl)
{
sc_apl_status ($apl[0], ‘on’);
}
}

$v_user = {dataset[0][2]};
sc_set_global([v_user]);

sc_redir(‘menu.php’);
}

Também controlo o acesso por grupos… mas ai vai da criatividade e necessidade de cada um.
Mas não usava a criptografia… mas vou passar a usar.

Foi ótimo ver como você faz…

T+

Tanto o exemplo da Jaqueline quanto o do Diogo Funcionam bem.

Uso algo parecido com o exemplo do Diogo. A vantagem está no fato de você não precisar editar o código de validação sempre que criar uma nova aplicação no projeto. Cadastra a aplicação na tabela e configura as permissões.

Olá… agora que estou começando a entender a parte de Login…

Poderia me explicar este if?

if(isset({rs[0][0]}))
{
foreach({rs} as $apl)
{
sc_apl_status ($apl[0], ‘on’);
}
}

obrigada!

if(isset({rs[0][0]})) // Verifica se o lookup retornou conteúdo “valido”
{
foreach({rs} as $apl) // neste momento ele ler todas as aplicações retornadas pelo lookup e aplica as permissoes
{
sc_apl_status ($apl[0], ‘on’);
/* neste caso simplismente ativa a aplicação para uso poderia tmb aplicar níveis de acesso “CIDAT” EX:
sc_apl_conf ($apl[0],“insert”, “off”); // Desativa função insert
sc_apl_conf ($apl[0],“update”, “off”); // Desativa função update
sc_apl_conf ($apl[0],“delete”, “off”); // Desativa função delete
*/
}
}

Compreendi!

Obrigada! :]

Se o select nao trouxer nada ou o banco tiver vazio ou qualquer outro erro, ele nao vai entrar no if pois a posição do array nao estara setada.

Previne dar erros de undefined offset na tentativa de acessar uma posição inexistente do array.

Continuando, aplicado a segurança nos formularios / consultas, se o usuario ficar um tempo sem usar o sistema (não sei bem quantos minutos), ao tentar acessar esse aplicativo (que encontra-se aberto), dá uma mensagem de “usuario não autorizado”. Gostaria de aumentar esse tempo. Não sei se é no PHP ou no SC… alguem sabe ???

PHP.INI

Eu alterei a linha max_input_time para = 300

Estou testando, dando certo, eu posto aqui blz… um abraço mestre

http://uk3.php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

Para documentar, após a mudança para max_input_time para = 300 e o “pessoal” pelo menos parou de reclamar.