Normalização de Banco de Dados
Atualmente, armazenamos os status dos nossos usuários
na mesma tabela onde estão os próprios usuários.
Isso, no entanto, está incorreto - acabamos tendo
uma tabela não normalizada, pois as palavras 'user'
e 'admin' se repetem muitas vezes.
É necessário realizar a normalização - vamos extrair
nossos status para uma tabela separada statuses:
| id | name |
|---|---|
| 1 | user |
| 2 | admin |
E na tabela users criaremos uma coluna
status_id. Agora, durante o registro,
na coluna status_id, iremos inserir
o id do status da tabela statuses:
<?php
$query = "INSERT INTO users
SET login='$login', password='$password', status_id='1'";
?>
As mudanças mais complexas ocorrerão na autorização:
para obter o status do usuário,
será necessário executar um LEFT JOIN:
<?php
$login = $_POST['login'];
// Obtém o usuário pelo login e junta o status:
$query = "SELECT users.*, statuses.name as status FROM users
LEFT JOIN statuses
ON users.status_id=statuses.id WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$hash = $user['password'];
if (password_verify($_POST['password'], $hash)) {
$_SESSION['auth'] = true;
$_SESSION['status'] = $user['status']; // status
} else {
}
} else {
}
?>
Modifique sua autorização e registro de acordo com o descrito na teoria.
Faça as alterações no funcionamento do painel de administração (exibição dos status dos usuários, alteração de status e assim por diante).