Filtro por usuário logado

Boa tarde!

Quero que o usuário só veja os seus registros, a não ser que o usuário seja administrador, dai pode ver todos os registros.

Temos inúmeros tópicos que falam a respeito disso, já pesquisou aqui?

Achei dois tópicos que falavam a respeito, mas não deram certo.

Vc pode montar um where usuario={usuario}

Mas vai ser bem complicado isso…

No sql da minha consulta eu tenho o seguinte código:

SELECT
ta.cd_apontamento,
ta.ds_apontamento,
ta.hr_apontamento,
ta.cd_cliente,
ta.cd_projeto,
ta.cd_atividade,
ta.login,
ta.dt_apontamento,
tc.ds_cliente,
tp.nm_projeto,
tas.nm_atividade
FROM
toth_apontamentos ta
INNER JOIN toth_usuarios_clientes tuc ON ta.cd_cliente = tuc.cd_cliente
INNER JOIN toth_clientes tc ON ta.cd_cliente = tc.cd_cliente
INNER JOIN toth_projetos tp ON ta.cd_projeto = tp.cd_projeto AND tp.cd_cliente = tc.cd_cliente
INNER JOIN toth_atividades tas ON ta.cd_atividade = tas.cd_atividade AND tas.cd_cliente = tp.cd_cliente
WHERE tuc.login = ‘[usr_login]’

mas dai não sei se preciso fazer algo no sql ou em algum evento.

esta certo , só que dai cada usuário vai ver o seu registro, si tu quer que o administrador veja tudo teria que ficar assim

WHERE ( tuc.login = ‘[usr_login]’ or ‘[usr_login]’ = ‘administrador’ )

Eu inclui a linha " AND ta.login = ‘[usr_login]’ " e agora está filtrando certo por usuário logado, agora para o administrador ter acesso a todos os registros eu coloquei assim " WHERE ( tuc.login = ‘[usr_login]’ AND ta.login = ‘[usr_login]’ or ‘[usr_login]’ = ‘administrador’ ) " mas não deu certo, eu tenho que definir em algum evento o ‘administrador’ ?

WHERE (
(tuc.login = ‘[usr_login]’ AND ta.login = ‘[usr_login]’) or (’[usr_login]’ = ‘administrador’ )
)

Continua aparecendo apenas os registros do usuário logado, mesmo sendo administrador.

Tente simplificar a query e ir incrementando passo a passo, para identificar onde é o problema

Faz uma consulta em sua tabela de usuários, retornando se o mesmo é Administrador ou não

se for adm, você tira o where abaixo e se não for voê deixa.

WHERE tuc.login = '[usr_login]'

O erro aparentemente é no " OR (’[usr_login]’ = ‘administrador’ ) " pois até o “AND” ele faz tudo certo.

Desculpe, mas eu não entendi o que deve ser feito, teria como dar um exemplo?

Como vc sabe se o usuário logado é administrador do sistema ?

Hum entendi, eu estou usando para testes um usuário que é o administrador e outro que não tem privilégios de administrador, porém os dois retornam apenas os seus registros, mas não entendi porque tirar o where, pois o usuário pode ser ou não administrador, então se tirar o where qualquer usuário pode acessar todos os registros.

WHERE ( tuc.login = '[usr_login]' or '[usr_login]' = 'administrador' )

isto aqui que eu coloquei e para o login com nome de administrador e não para um usuário com privilégios de administrador.

no login busque na BD o privilegio do usuario, e coloque em uma variavel global por exemplo [var_glo_is_admin] = 1 caso não for admin sete para [var_glo_is_admin] = 0;

e no WHERE deixe assim

WHERE ( tuc.login = '[usr_login]' or [var_glo_is_admin] = 1)

Desculpa a demora pra responder, mas não entendi direito eu tenho que colocar uma variável global no onvalidate do login aonde está o $usr_priv_admin ? Tem algum exemplo ?