Ограничение доступа по разрешению - PullRequest
0 голосов
/ 13 ноября 2009

спасибо за просмотр. У меня есть БД, которая имеет пользователей, роли и user_roles. То, что я пытаюсь добиться, - это логин, в котором будут выбираться пользователи с правами администратора или ассоциированного пользователя. Тогда для входа в систему используются имя и пароль.

Мой синтаксис SQL до сих пор -

SELECT * FROM users 
LEFT JOIN ON user_roles 
ON user.id=user_roles.userid AND roleid IN (Administrator, Associate) 
WHERE username = '$username' AND password = '$password'";

Я не уверен, где я иду не так.

Заранее спасибо за помощь.

Ответы [ 2 ]

1 голос
/ 13 ноября 2009

Попробуйте заменить "LEFT JOIN" на "INNER JOIN"

0 голосов
/ 13 ноября 2009

Вот как бы я написал запрос:

$stmt = $pdo->prepare("
SELECT (u.password = :password) AS password_is_correct,
  (r.roleid IS NOT NULL) AS role_is_authorized
FROM users u
LEFT JOIN ON user_roles r
  ON u.id=r.userid AND r.roleid IN (Administrator, Associate) 
WHERE u.username = :username");

$stmt->execute(array(":password"=>$password, ":username"=>$username));

Это позволяет различать три условия: (1) имя пользователя не существует, (2) неверный пароль или (3) роль не авторизована.

PS: Должны ли цитироваться слова «Администратор» и «Ассоциированный» или что-то в этом роде? То, как вы их используете, они выглядят как идентификаторы, а не значения.

...