Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Mulambo

[Resolvido] Cruzando tabelas em sistema de "Permissões"

Recommended Posts

Olá pessoal,

 

 

to com uma duvída bem chata, gostaria de uma luz!

 

Tenho uma especie de sistema de permissões, onde cada usuario pode ficar responsável por certas areas do sistema.

Para fazer isso funcionar, eu criei 3 tabelas, uma para usuarios (User), uma para as areas (partners) e outra para relacionar as duas tabelas anteriores (userPartners)

 

Explicando melhor as tabelas:

 

Tabela User:

id,nome,login,senha,etc

 

Tabela Partners:

partnerId,partnerName,...

 

Tabela userPartners:

partnerId,userId

 

O meu problema é cruzar as tabelas, eu preciso de um select com as seguintes informações, partnerId, partnerName(que está na tabela Partners e não na tabela de associação). Básicamente é essa minha dúvida, atualmente meu SELECT tá assim:

 

$qPartnerSelect = "SELECT `userpartners`.*, `users`.`nome` FROM `userpartners` INNER JOIN `users` ON `userpartners`.`userId` = `users`.`id` ORDER BY `userpartners`.`partnerId` ASC";

 

Desse modo eu encontro os resultados mas não consigo imprimir o nome do "partner".

 

Agradeço a ajuda de todos,

Dênis Fernandes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Junta a tabela partner no select também:

$qPartnerSelect = "SELECT p.partnerId, p.partnerName, u.`nome` 
FROM `userpartners` up
INNER JOIN `users` u ON up.`userId` = u.`id` 
INNER JOIN `partiners` p ON up.partnerId = p.partnerId 
ORDER BY `userpartners`.`partnerId` ASC";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado, colando seu código deu um errorzinho (Unknown column 'userpartners.partnerId' in 'order clause'.)

 

Então dei um toque, e funcionou perfeito!

 

Segue aqui o código atual(Pouquissima diferença):

$qPartnerSelect = "SELECT p.`partnerId`, p.`partnerName`, u.`nome`

FROM `userpartners` up

INNER JOIN `users` u ON up.`userId` = u.`id`

INNER JOIN `partners` p ON up.partnerId = p.partnerId

ORDER BY up.`partnerId` ASC";

 

EDIT

 

Eu me esqueci de um pequeno detalhe, existe uma condição, onde o userId da tabela userPartners tem que ser igual ao id da tabela User.

 

Tentei arrumar essa condição, mas não tive sucesso, alguma idéia?

 

 

Att,Dênis Fernandes

Compartilhar este post


Link para o post
Compartilhar em outros sites

A grosso modo sim, mas o que tá acontecendo é o seguinte, usuarios que pela lógica não teriam permissão para acessar certa area, estão com livre acesso, ou seja o SELECT tá fazendo uma busca por inteiro sem excluir usuários que não poderiam acessar certas areas.

 

Usuário que deveria ter acesso:

user1m.jpg

 

Usuário que não deveria:

user2.jpg

 

Viu? qualquer um pode selecionar ali, sendo que era pra no segundo caso só aparecer 1 partner.

 

 

Alguma idéia?

 

Att,Dênis Fernandes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acrescenta o id do usuário no Where para filtrar as permissões dele:

$qPartnerSelect = "SELECT p.partnerId, p.partnerName, u.`nome` 
FROM `userpartners` up
INNER JOIN `users` u ON up.`userId` = u.`id` 
INNER JOIN `partiners` p ON up.partnerId = p.partnerId 
WHERE U.id = {$id}
ORDER BY `userpartners`.`partnerId` ASC";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poxa, muito obrigado, agora funcionou perfeito!!

 

Precisando, tamo aê!

 

att,Dênis Fernandes

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.