Como fazer um login para clintes e admin (***** RESOLVIDO *****)

Olá pessoal,
Sou nava no Fórum e com pouca experiência em php e no SC 5.2.
Gostaria da ajuda de vcs para fazer um login que meu cliente entre em umá área restrita separada da área do administrador da aplicação, com menu diferenciado.

Alguém pode me ajudar?
Obrigada desde já.

Leia um pouco sobre o sistema de segurança. Tem vários tópicos no fórum. No SC é possível utilizar um sistema de segurança que permite vc dar permissões para grupos de usuários. No menu tem uma opção de esconder aplicações, ai vc não precisa fazer menus separados para grupos/usuários diferentes.

Oi,
Estava vendo o manual agora e fiz um teste, mas o meu cliente não consegue logar.
Tenho que ter 2 Menus, um para o Adm e outro para o cliente, separando assim a aplicação no Grupo?

No grupo vc escolhe quais usuários fazem parte e quais os direitos deste usuarios sobre as aplicações. Para o grupo administrador, vc escolhe os usuários que são administradores e diz quais as aplicações eles podem acessar e o que pode fazer em cada aplicação, incluir, atualizar, deletar.

Caso vc faça dois menus, no login vc teria que validar que tipo de usuários está logando e direcionar para o menu correto, em função do tipo de usuário.

Descreva como está tentando fazer, para o pessoal poder ajudar melhor.

Bom,
Fiz um teste com o Módulo Segurança com a 3º opção(usuario/grupo/aplicação). Lá dá para vc dividir grupos e usuários com as aplicações certo, mas em Dados Gerais ele pede só um Menu e o que gostaria de fazer era que tivesse uma área restrita para o Admin e outra para o Cliente.

Estou usando as tabelas que o exemplo do webHelp em Projeto/Segurança

Tabelas abaixo

[code]-- -----------------------------------------------------
– Table tbl_aplicacoes


CREATE TABLE IF NOT EXISTS tbl_aplicacoes (
nome VARCHAR(150) NOT NULL ,
descricao VARCHAR(170) NULL DEFAULT NULL ,
PRIMARY KEY (nome) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;


– Table tbl_grupos


CREATE TABLE IF NOT EXISTS tbl_grupos (
codigo INT(11) NOT NULL AUTO_INCREMENT ,
descricao VARCHAR(50) NULL DEFAULT NULL ,
PRIMARY KEY (codigo) ,
UNIQUE INDEX XPKtblgrupousuario (codigo ASC) )
ENGINE = InnoDB
AUTO_INCREMENT = 7
DEFAULT CHARACTER SET = latin1;


– Table tbl_grupos_x_apps


CREATE TABLE IF NOT EXISTS tbl_grupos_x_apps (
cod_grupo INT(11) NOT NULL DEFAULT ‘0’ ,
cod_aplicacao VARCHAR(150) NOT NULL ,
PRIMARY KEY (cod_grupo, cod_aplicacao) ,
UNIQUE INDEX XPKtblgrupoxdireito (cod_grupo ASC, cod_aplicacao ASC) ,
INDEX tbl_grupos_x_apps_ibfk_2 (cod_aplicacao ASC) ,
CONSTRAINT tbl_grupos_x_apps_ibfk_1
FOREIGN KEY (cod_grupo )
REFERENCES tbl_grupos (codigo),
CONSTRAINT tbl_grupos_x_apps_ibfk_2
FOREIGN KEY (cod_aplicacao)
REFERENCES tbl_aplicacoes (nome))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;


– Table tbl_usuarios


CREATE TABLE IF NOT EXISTS tbl_usuarios (
login VARCHAR(20) NOT NULL DEFAULT ‘’ ,
senha VARCHAR(40) NULL DEFAULT NULL ,
nome CHAR(50) NULL DEFAULT NULL ,
email VARCHAR(100) NULL DEFAULT NULL ,
PRIMARY KEY (login) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;


– Table tbl_usuario_aplicacoes


CREATE TABLE IF NOT EXISTS tbl_usuario_aplicacoes (
fk_usuario_login VARCHAR(20) NOT NULL ,
fk_interface_nome VARCHAR(150) NOT NULL ,
PRIMARY KEY (fk_usuario_login, fk_interface_nome) ,
INDEX tbl_usuario_aplicacoes_ibfk_2 (fk_interface_nome ASC) ,
CONSTRAINT tbl_usuario_aplicacoes_ibfk_1
FOREIGN KEY (fk_usuario_login)
REFERENCES tbl_usuarios (login),
CONSTRAINT tb_usuario_aplicacoes_ibfk_2
FOREIGN KEY (fk_interface_nome)
REFERENCES tbl_aplicacoes (nome))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;


– Table tbl_usuarios_x_grupos


CREATE TABLE IF NOT EXISTS tbl_usuarios_x_grupos (
login VARCHAR(20) NOT NULL DEFAULT ‘’ ,
cod_grupo INT(11) NOT NULL DEFAULT ‘0’ ,
UNIQUE INDEX XPKtblgrupoxusuario (cod_grupo ASC, login ASC) ,
INDEX tbl_usuarios_x_grupos_ibfk_1 (login ASC) ,
CONSTRAINT tbl_usuarios_x_grupos_ibfk_1
FOREIGN KEY (login)
REFERENCES tbl_usuarios (login),
CONSTRAINT tb_usuario_x_grupos_ibfk_2
FOREIGN KEY (cod_grupo)
REFERENCES tbl_grupos (codigo))
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;

[/code]

Tenho um Menu para o Admin e fiz um outro para Clientes aonde quero colocar algumas consultas para serem visualizadas.

Perguntas:
Como posso fazer para que o meu cliente não veja os dados do admin e só entre em sua área?
Devo colocar na tabela usuarios um campo tipo?
Como faço esta validação?

Aguardo a ajuda de vcs.

Fiz um teste e criei um Grupo Cliente com as aplicações: Autentica login e Menu Clientes (Já tentei com Login Aplicação) e em Usuários criei um um usuário Cliente com o Grupo Cliente.
Tentei logar mas dá o seguinte erro:

Usuário não autorizado

É possível, dentro do ambiente de desenvolvimento, inibir o uso de segurança e senha nas aplicações sem que essa funcionalidade tenha que ser efetivamente desativada nas mesmas. Para tanto, é necessário desativar o seu uso em desenvolvimento acessando o item (Meu ScriptCase) no menu (Configuração).

Mesmo eu desabilitando não funcionou, dá o mesmo erro.

Usuário não autorizado é erro de permissão. Significa que o usuário não tem permissão para usar a aplicação solicitada.

Mesmo ele estando no grupo com as aplicações?
Oq posso fazer Clayton?

Cleyton, desculpe.

Desabilitei oq estava pedindo o siste e reiniciei, o cliente entrou, mas com o menu do admin.

O OnValidate do Loguin está assim:

[code]$var_login = sc_sql_injection({login});
$var_password = sc_sql_injection(md5({password}));

sc_lookup(ds_user, "select login, senha from tbl_usuarios where login = $var_login and senha = $var_password ");

if ({ds_user} != false)
{
$sm_global_login = {login};
sc_set_global($sm_global_login);

    sc_lookup(ds_user_app, "select tbl_grupos_x_apps.cod_aplicacao from tbl_grupos_x_apps inner join tbl_usuarios_x_grupos on tbl_grupos_x_apps.cod_grupo = tbl_usuarios_x_grupos.cod_grupo where tbl_usuarios_x_grupos.login = '{login}' ");

if ({ds_user_app} != false)
{
	for($i = 0; $i < count({ds_user_app}); $i++)
	{		    
		sc_apl_status({ds_user_app[$i][0]}, 'on');
	}
}

sc_redir('MenuAdmin');		

}
else
{
sc_error_message(“Acesso negado !”);
}[/code]

Estou enrrolada nisso.

sc_redir(‘MenuAdmin’);

Vc mandou ele ir para o MenuAdmin. Neste caso vc tem que validar se quem está fazendo login é um cliente ou um administrador.

Se cliente então,
sc_redir(‘MenuCliente’);

Se administrador entao,
sc_redir(‘MenuAdmin’);

Acho que vc teria que colocar um campo na tabela de usuário para usar na validação.

Na tabela tbl_grupos_x_apps tem 1 para admin e 7 para clientes ou vc ainda acha que devo criar um campo TIPO?

Vc pode me informar quais os parâmetros que devo usar, estou aprendendo ainda?

Desculpe a perturbação ok!

Não esquenta!!!

Vc pode validar pelo ID do grupo normalmente. Mas e se o ID do grupo mudar? Vc terá que mudar no código a validação.

Colocando um campo tipo na tabela de usuário, vc valida pelo tipo e não precisa se preocupar em mudar no código, pois terá sempre tipos para usuários.

Usando um campo tipo seu lookup ficaria assim:
sc_lookup(ds_user, "select login, senha, tipo from tbl_usuarios where login = $var_login and senha = $var_password ");

E ai na linha onde vc colocou o sc_redir acho que um if para validar pelo tipo resolve. Supondo que vai usar texto no campo:

if ({ds_user[0][2] == “admin”)
{
sc_redir(‘MenuAdmin’);
}else{
sc_redir(‘MenuCliente’);
}

O Validate ficou assim:

[code]$var_login = sc_sql_injection({login});
$var_password = sc_sql_injection(md5({password}));

sc_lookup(ds_user, "select login, senha, tipo from tbl_usuarios where login = $var_login and senha = $var_password ");

if ({ds_user} != false)
{
$sm_global_login = {login};
sc_set_global($sm_global_login);

    sc_lookup(ds_user_app, "select tbl_grupos_x_apps.cod_aplicacao from tbl_grupos_x_apps inner join tbl_usuarios_x_grupos on tbl_grupos_x_apps.cod_grupo = tbl_usuarios_x_grupos.cod_grupo where tbl_usuarios_x_grupos.login = '{login}' ");

if ({ds_user_app} != false)
{
	for($i = 0; $i < count({ds_user_app}); $i++)
	{		    
		sc_apl_status({ds_user_app[$i][0]}, 'on');
	}
}

	if ({ds_user[0][2] == "admin")
		{
	sc_redir('menu_admin');

}
else
{
sc_redir(‘menu_cliente’);
}
else
{
sc_error_message(“Acesso negado !”);
}
[/code]

No Control_login>Campos - eu coloco o campo tipo?
Pois tenho que informar, exemplo: 1 - Admin e 2 - Clientes.

POis com o código q me passou deu um erro: Parse error: parse error in C:\wamp\www\scriptcase\app\wjseguros\control_login\control_login_apl.php on line 1209

Vc criou o campo tipo na sua tabela tbl_usuarios? Vc está chamando tipo no seu ds_user, não precisa criar o campo tipo no controle. Se o valor do campo tipo na tbl_usuarios for int ai vc usar um inteiro na comparação.

if ({ds_user[0][2] == 1)
{
sc_redir(‘menu_admin’);
}
else
{
sc_redir(‘menu_cliente’);
}

Neste caso, se for 1 vai para admin e caso não seja 1 vai para cliente.

Vc criou o campo tipo na sua tabela tbl_usuarios? Sim, cadastrei o campo tipo na tabela

Vc está chamando tipo no seu ds_user? Sim, veja abixo:
sc_lookup(ds_user, "select login, senha, tipo from tbl_usuarios where login = $var_login and senha = $var_password ");

Coloquei

if ({ds_user[0][2] == 1) { sc_redir('menu_admin'); } else { sc_redir('menu_cliente'); }

Mas deu o seguinte erro:
Parse error: parse error in C:\wamp\www\scriptcase\app\wjseguros\control_login\control_login_apl.php on line 1211

Se o valor do campo tipo na tbl_usuarios for int ai vc usar um inteiro na comparação.
Era txt, mas é melhor o int(numero)?
Onde vejo está comparaçaõ?

No IF falta fechar a chave:

if ({ds_user[0][2] == 1)

Correto:

if ({ds_user[0][2]} == 1)

Talvez seja isso.

Parse error: parse error in C:\wamp\www\scriptcase\app\wjseguros\control_login\control_login_apl.php on line 1225

Tenta assim:

$var_login = sc_sql_injection({login});
$var_password = sc_sql_injection(md5({password}));

sc_lookup(ds_user, "select login, senha, tipo from tbl_usuarios where login = $var_login and senha = $var_password ");

if ({ds_user} != false)
{
$sm_global_login = {login};
sc_set_global($sm_global_login);

    sc_lookup(ds_user_app, "select tbl_grupos_x_apps.cod_aplicacao from tbl_grupos_x_apps inner join tbl_usuarios_x_grupos on tbl_grupos_x_apps.cod_grupo = tbl_usuarios_x_grupos.cod_grupo where tbl_usuarios_x_grupos.login = '{login}' ");

if ({ds_user_app} != false)
{
	for($i = 0; $i < count({ds_user_app}); $i++)
	{		    
		sc_apl_status({ds_user_app[$i][0]}, 'on');
	}
}

    else
    {
sc_error_message("Acesso negado !");
    }

if ({ds_user[0][2]} == 1)
{
sc_redir(‘menu_admin’);
}
else
{
sc_redir(‘menu_cliente’);
}

Continua dando erro, agora é este:
Parse error: parse error, expecting `T_FUNCTION’ in C:\wamp\www\scriptcase\app\wjseguros\control_login\control_login_apl.php on line 2316