Admin acesso total [RESOLVIDO]

Boa tarde pessoal!!

Tenho um sistema bem simples com 2 níveis de permissões: Admin e usuário. Criei em todas as tabelas o fk_login = ‘[var_login]’ para o usuário somente visualizar seus dados. Porém quando entra com admin ele não visualiza nda porque as váriáveis não estão gravadas com o fk_login = ‘admin’. Gostaria que o admin visualizasse todos os registros. Tenho uma opção de criar aplicações exclusivas para o admn não fazendo o filtro fk_login = ‘[var_nova]’. Porém não teria outra forma de setar nas aplicações que ele é admin e poder visualizar tudo sem ter que fazer aplicações somente para ele?

Existe aqui diversos tópicos a respeito, pesquise no fórum.

Ante mão é uma questão simples de lógica.

Antes de postar eu faço uma pesquisa no fórum e não achei, por isso que eu postei

Na verdade há tópicos ainda do mês de jan/2018

A princípio é só você ver a estrutura da tabela sec_users e fazer o controle através de uma variável global, e nos seus SELECT fazer o filtro em WHERE.
Considere as opções existentes na Cláusula WHERE do SELECT ( Case )

Boa tarde Jocimar valeu pela ajuda, mas abri todos os tópicos do mês de Janeiro na categoria “Controle” e nenhum atende a minha dúvida, poderia por gentileza enviar o link?

Obs: Em todas a minhas querys estou colocando WHERE fk_login = ‘[var_nova]’, funcionando perfeitamente, no entanto, gostaria que o admin visualizasse todos os registros.

Daniel,

Eu costumo fazer assim: Na aplicação de login, crio uma variável pública pra conter essa informação, assim resolve esse problema, tipo:

if($tipo_usuario) == 'ADMIN'
{
   [c_where] = "1=1";
} else
{
   [c_where] = "fk_login = '[var_login]'"
}

E nos WHEREs dos SELECTs das consultas, coloco a variável

SELECT
...
...
...
FROM
...
WHERE [c_where];

Assim quando o usuário for o ADMIN, sempre o WHERE vai ser 1=1 e vai trazer todos os registros. Se não for, faz o filtro conforme o usuário.

Grande Kleyber,

É isso mesmo, agradeço pela ajuda e paciência!!!

Cliquei em Inicio e pesquise: Segurança login admin

Logo de cara veio:

http://www.scriptcase.com.br/forum/index.php/topic,16454.msg86519.html#msg86519

Valeu Haroldo,

Estava pesquisando “Níveis de Perfis”, por isso não tinha encontrado, mas obrigado pela ajuda!!!

Estive pesquisando e visualizei essa solução que além da ajuda do Kleyber atende minha demanda:

Seria colocar em todas as consultas no evento Scriptinit o seguinte script:

if ([usr_priv_admin]) {

$sql = " fk_login = ‘[var_nova]’";

if  ($sql <> "") {

if (empty({sc_where_atual})) {
sc_select_where(add) = " where ".$sql;
}
else {
sc_select_where(add) = " AND ".$sql;
}
}
}

}

No entanto, no admin não aparece nenhum registro e no usuário aparece todos os registros. Tentei alterar de diversas formas mas ou aparece o admin visualizando tudo e o usuário também, ou 1 ou outro.

Danyx
Tive uma dificuldade parecida, onde o admin acessaria os dados de vários clientes, mas o usuário cliente somente os seus dados . Devido ao meu conhecimento inicial, usei parte do projeto gradebook, código do login, e uma tabela auxiliar no banco de dados, onde relaciono o admin ao id de todos os clientes e quando crio um usuário novo, faço update do login e o id do cliente na tabela auxiliar. Nas aplicações relaciono a variável global do id do cliente nos lookup dos campos (não fazer no sql), desta forma o usuário tem acesso restrito. Não sei se foi a melhor solução, mas serviu por enquanto.

Eventos Onload na app_menu (gerada pelo SC) adaptei o seguinte código:

$sql = “SELECT group_id FROM sec_users_groups WHERE login = '”. [usr_login] ."’";

sc_lookup(ds, $sql);

$group_id = {ds[0][0]};

if ($group_id == 3){
sc_reset_menu_delete();
sc_menu_delete(item_1,item_11,item_16,item_20,item_24);
}
elseif ($group_id == 2){
sc_reset_menu_delete();
sc_menu_delete (item_1,item_16);
}
elseif ($group_id == 4){
sc_reset_menu_delete();
sc_menu_delete (item_1,item_11,item_13,item_20,item_24);
}

Estuda o código e vê se te atende, se tiver dúvidas posta que ajudarei no que for possível !

Pessoal Agradecer a todos que ajudaram.

Segue a solução que adaptei para a minha necessidade:

1 - No SQL principal da consulta não precisa colocar a cláusula WHERE;

2 - No evento Onscriptinit da consulta é somente colocar esse código:

$sql = " fk_login = ‘[var_global]’";

if ($sql != [usr_priv_admin]) {
if (empty({sc_where_atual})) {
sc_select_where(add) = " where ".$sql;
}
else {
sc_select_where(add) = " AND ".$sql;
}
}