Well, I tried to do something different than what I do, I did all the authorization based on token:
<?php
class ACL // classe para controle de acesso
{
// retorna um token baseado no tipo do usuário, usando base64
public static function generateToken($type)
{
return base64_encode('YOUR_APP_KEY'.$type);
}
// verifica se token recebido é de algum tipo
public static function validToken($active, $type)
{
return base64_decode($active) === 'YOUR_APP_KEY'.$type;
}
// em ambos coloquei também a key da aplicação para ter mais segurança
}
// array de usuários com o token de cada um
$users = [
'aluno' => ACL::generateToken('aluno'),
'professor' => ACL::generateToken('professor'),
'administrador' => ACL::generateToken('administrador'),
];
// se o meu formulário de acesso não foi submetido eu irei exibir ele
if(count($_POST) <= 0) :
?>
<form method='post'>
<input type='radio' name='type' value='aluno'> Aluno
<input type='radio' name='type' value='professor'> Professor
<input type='radio' name='type' value='administrador'> Administrador
<input type='submit' value='Access'>
</form>
<?php
// caso o formulário de acesso tenha sido submetido
else :
$type = $_POST['type']; // salvo o tipo de usuário
// verifico o token do usuário com o tipo que eu já tinha definido antes, assim identifico qual usuário é
if(ACL::validToken($users[$type], 'aluno'))
echo 'Acessou como aluno';
else if(ACL::validToken($users[$type], 'professor'))
echo 'Acessou como professor';
else if(ACL::validToken($users[$type], 'administrador'))
echo 'Acessou como administrador';
endif;
?>
To do this on your system, you must record or token or the type of user in the registration of the same in the database, at the time of the login you will retrieve this token and save in session (if you want to apply an encryption on this token would look even better), and in your route file you vary this check.