Home
Button Mobile Webdesign em Foco
Newsletter Webdesign em Foco
Support Webdesign em Foco
Contribuition Webdesign em Foco
Doe para a Webdesign em Foco
Suporte da Webdesign em Foco
Fechar

Cadastro e Login - #33 Logout and Permitions

04/01/2019

Nessa vídeo-aula vamos trabalhar com a parte de logout para o encerramento das sessões do sistema e retirada do usuário da área restrita e níveis de acesso.

Sistema de logout em PHP

Na nossa página inicial da área restrita vamos criar o link para sair do sistema:

<a href="<?php echo DIRPAGE.'controllers/controllerLogout'; ?>">Sair</a>

Controller Logout

Posteriormente iremos desenvolver nosso controller responsável por efetuar o logout. Será um controller bem simples que basicamente chamará o método de destruição de sessions da ClassSession:

<?php
$session=new Classes\ClassSessions();
$session->destructSessions();
echo "<script>
    alert('Você efetuou o logout!');
    window.location.href='".DIRPAGE."';
</script>";

Na nossa ClassSession, o método destructSessions() ficou da seguinte forma:

#Destruir as sessions existentes
public function destructSessions()
{
    foreach (array_keys($_SESSION) as $key) {
        unset($_SESSION[$key]);
    }
}

Níveis de Acesso

Vamos implementar no nosso sistema também níveis de acesso para cada usuário. Então, dependendo do perfil do meu usuário eu posso conceder mais ou menos funções para ele dentro do sistema.

Para a verificação dos níveis de acesso buscamos a característica do usuário na coluna permissoes da tabela user do nosso banco. Esses dados estão gravados na $_SESSION['permition'] dentro da nossa ClassSession. Então basta fazermos uma verificação alterando o método verifyInsideSession() que ficará assim:

#Validar as páginas internas do sistema
public function verifyInsideSession($permition)
{
    $this->verifyIdSessions();
    if(!isset($_SESSION['login']) || !isset($_SESSION['permition']) || !isset($_SESSION['canary'])){
        $this->destructSessions();
        echo "
            <script>
                alert('Você não está logado');
                window.location.href='".DIRPAGE."login';
            </script>
        ";
    }else{
        if($_SESSION['time'] >= time() - $this->timeSession){
            $_SESSION['time']=time();
            if($_SESSION['permition'] !='manager' && $permition != $_SESSION['permition']){
                echo "
                <script>
                    alert('Você não tem acesso a este conteúdo!');
                    window.location.href='".DIRPAGE."areaRestrita';
                </script>
                ";
            }
        }else{
            $this->destructSessions();
            echo "
            <script>
                alert('Sua sessão expirou. Faça login novamente!');
                window.location.href='".DIRPAGE."login';
            </script>
            ";
        }
    }
}

* Lembrando que no exemplo acima utilizamos o echo dentro do método. Isso não é uma prática recomendada, devemos sempre dar o retorno dos nossos métodos. Foi usado nesse caso apenas para agilizar a mensagem.

Vamos alterar também o método setHeadRestrito dentro da ClassLayout assim:

public static function setHeadRestrito($permition)
{
    $session=new ClassSessions();
    $session->verifyInsideSession($permition);
}

Agora basta implementarmos o método nas páginas que desejamos limitar. Assim:

<?php \Classes\ClassLayout::setHeadRestrito("manager"); ?>

Sucesso nos códigos e na vida!

Receba as aulas da Webdesign em Foco em Seu Email
Suporte Webdesign em Foco

Posts Relacionados

Cadastro e Login - #32 Esqueci minha senha II
Vamos finalizar o sistema de envio de senhas perdidos utilizando o php e a ClassMail.
Saiba mais!
Cadastro e Login - #34 Finalizando o Diagrama de Classes
Nesse vídeo finalizaremos o Diagrama de Classes do nosso sistema com os métodos e classes inseridos ao longo do projeto.
Saiba mais!
Cadastro e Login
Neste curso vamos aprender a criar um sistema completo de cadastro e login.
Saiba mais!