Bloquear a un usuario para que no inicie sesión con un cierto nivel de permiso y luego se muestra una alerta para que sepa por qué

Estoy tratando de descubrir cómo impedir que un usuario inicie sesión en mi sitio a menos que supere un cierto nivel de permiso. Estoy haciendo público mi sitio y una vez que alguien se registra, se les otorga el nivel de permiso 'banco'. Una vez que acepto al usuario y cambio el nivel de permiso, pueden iniciar sesión. La forma en que estoy bloqueando los usuarios de nivel de permiso de "banco" es con una redirección a la página de índice (donde inician sesión en). Sin embargo, quiero mostrar algún tipo de alerta emergente que muestre un mensaje que creo y luego, desde el principio, ni siquiera permitir que ese usuario avance.

No estoy seguro si puedo hacer esto con validación o no. Algo así como si este usuario intenta iniciar sesión, el script muere una vez que ve que el nivel de permiso está en el 'banco' del grupo. Luego aparece una alerta emergente que dice por qué.

Así es como le permito al usuario iniciar sesión.

if(Input::exists()) {
if(Token::check(Input::get('token'))) {

    $validate = new Validate();
    $validation = $validate->check($_POST, array(
        'username' => array('required' => true),
        'password' => array('required' => true)
    ));

    if($validation->passed()) {
        $user = new User();

        $remember = (Input::get('remember') === 'on') ? true : false;
        $login = $user->login(Input::get('username'), Input::get('password'), $remember);

        if($login) {
            Redirect::to('userIndex.php');
        } else {
            $tryagain = '<span class="signinpanel">' . "The information you entered did not match our records." . '</span>';
        }

    } else {
        foreach($validation->errors() as $error) {
            echo $error, '<br>';
        }
    }
}

Luego redirijo así ...

if($user->hasPermission('bench')) {
header("Location: http://sundayfundayleague.com");
die();
}

Este es mi código de permisos:

public function hasPermission($key) {
    $group = $this->_db->get('groups', array('id', '=', $this->data()->group));

 if($group->count()) {
        $permissions = json_decode($group->first()->permissions, true);

        if($permissions[$key] == true) {
            return true;
        }
    }
    return false;
}

¿Cómo puedo hacer esto?

ACTUALIZAR:

No estoy seguro de estar haciendo esto correctamente. Estoy haciendo un dado y mostrando un mensaje de error que inventé.

if(Input::exists()) {
if(Token::check(Input::get('token'))) {

    $permissionError = "Your membership request has not been accepted yet.";

    $validate = new Validate();
    $validation = $validate->check($_POST, array(
        'username' => array('required' => true),
        'password' => array('required' => true)

        if($user->hasPermission('bench')) {
        die($permissionError);
    ));

    if($validation->passed()) {
        $user = new User();

        $remember = (Input::get('remember') === 'on') ? true : false;
        $login = $user->login(Input::get('username'), Input::get('password'), $remember);

        if($login) {
            Redirect::to('userIndex.php');
        } else {
            $tryagain = '<span class="signinpanel">' . "The information you entered did not match our records." . '</span>';
        }

    } else {
        foreach($validation->errors() as $error) {
            echo $error, '<br>';
        }
    }
}

Respuestas a la pregunta(0)

Su respuesta a la pregunta