Well, I've tried to do something other than what I do, I've done all token-based authorization:
<?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;
?>
In order to do this on your system, you must either record the token or the type of user in the record of the same in the database, at login you will retrieve this token and save it in session (if you want to apply encryption to that token it would look even better), and in your route file you change this check.