Jump to content
Pellegrini3834

Não consigo compreender onde coloco meus metodos de validação de login e Sessao no MVC.

Recommended Posts

Ola amigos do Fórum venho por meio deste post tirar minhas variadas duvidas q continua assombrar na programação MVC.

 

Queria saber onde coloco meus métodos de verificação de login e de sessão eu coloco na classe modelo ou no controle. 

Lembrando que eu também verifico:

* se o usuário e senha se estiver em branco ele emite uma mensagem para preencher os campos.

* se o usuário e senha são admin se for ele emiti mensagem e depois reporta ele para pagina de cadastro de usuário.

* se o usuário e senha que vem da classe DAO estiver incorreta emiti mensagem de erro, mas se estiver correta ele emiti mensagem, e reporta ele para outra página  fechando ele com Sessões essa e minha outra duvida.

Onde eu coloco este método de verificação de sessões? modelo ou controle..

 

Obrigado.

 

 <?php

require_once 'modelo/usuario.php';
require_once 'dao/daoLogar.php';

class controleLogar {

    protected $ObjUsuario;
    protected $ObjDaoLogar;
    protected $ctl;

    public function __construct() {

        $this->ObjUsuario = new usuario(); // instancio da classe  Usuario.
        $this->ObjDaoLogar = new daoLogar();// instancio da classe DaoLogar.
    }

    public function ctlVerificarLogin() {

        if (isset($_POST["btnEntrar"])) {

            $this->ObjUsuario->setUsuario($_POST['txtusuario']);
            $this->ObjUsuario->setSenha($_POST['txtsenha']);
            $this->ctl = $this->ObjDaoLogar->DaoLogin($this->ObjUsuario);

            if (empty($_POST["txtusuario"]) || (empty($_POST["txtsenha"]))) {
                echo '<div class="alert-danger"> Por Favor Preencha o Campo em Branco!!!!!!</div>';
            } else if ($this->ObjUsuario->getUsuario() == 'admin' || $this->ObjUsuario->getSenha() == 'admin') {
                echo '<div class="alert-admMaster">Administrador Master Logado com Sucesso!!!!!!</div>';
                echo "<meta HTTP-EQUIV='refresh' CONTENT='8;URL=visaoAdministrador/visaoCadastrarUsuario.php'>";
            } else if (!$this->ctl) {
                echo '<div class="alert-warning">Usuário e Senha estão Incorretas!!!!!!</div>';
            } else {
                foreach ($this->ctl as $key => $value) {
                                        
                    switch ($value['perfil']) {
                        case 'Administrador':
                            echo '<div class="alert-administrador">Administrador Logado com Sucesso!!!!!!</div>';
                            echo "<meta HTTP-EQUIV='refresh' CONTENT='8;URL=visaoAdministrador/visaoMenuAdministrador.php'>";
                            break;
                        case 'Cliente':
                            echo '<div class="alert-cliente">Cliente Logado com Sucesso!!!!!!</div>';
                            echo "<meta HTTP-EQUIV='refresh' CONTENT='8;URL=visaoCliente/visaoMenuCliente.php'>";
                            break;
                        case 'Socio':
                            echo '<div class="alert-socio">Socio Logado com Sucesso!!!!!!</div>';
                            echo "<meta HTTP-EQUIV='refresh' CONTENT='8;URL=visaoSocio/visaoMenuSocio.php'>";
                            break;
                    }
                }
            }
        }
    }

}

 

Share this post


Link to post
Share on other sites

Boa tarde amigo, toda verificação que não envolva banco de dados - use o controle.

 

Dica:

Utilize um framework de mercado como o Codeigniter (CI), ele tem a estrutura MVC completa pra você e uma grande variedade de funcionalidade prontas...

Share this post


Link to post
Share on other sites

Separe as regras em o que elas podem possuir ou afetar:

- São regras de negócios? Model;

- As regras utilizam algo relacionado a model? SGBD, WS, API, etc..? Model;

- É relacionada ao servidor aonde o sistema está sendo executado? Apache, Nginx, FastCGI, CLI, etc..? Controller.

 

Entede-se por model, o conjunto de componentes que fazem parte da model e por controller o conjunto de componentes que fazem parte do controller.

 

23 minutos atrás, d1eg0. disse:

Dica:

Utilize um framework de mercado como o Codeigniter (CI), ele tem a estrutura MVC completa pra você e uma grande variedade de funcionalidade prontas...

 
 
 
 

De mercado, pode ser, mas, completo, nenhum pouco. CI é framework defasado que não segue nenhum padrão. Mesmo a versão 3, ainda utiliza programação do PHP 4. Frameworks completos são qualquer coisa, menos o CI.

  • +1 2

Share this post


Link to post
Share on other sites

Poxa obrigado amigos pela ajuda, mas de acordo com  o código acima preciso continuar a resolver o seguinte problema que não consigo solucionar.

Preciso um método no controle pra fechar as paginas restritas de acordo com o tipo de perfil que ele foi escolhido com as Sessões, mas não sei como vou fazer. Segue o exemplo abaixo.

 foreach ($this->ctl as $key => $value) {
                                        
                    switch ($value['perfil']) {
                        case 'Administrador':
                            echo '<div class="alert-administrador">Administrador Logado com Sucesso!!!!!!</div>';
                            echo "<meta HTTP-EQUIV='refresh' CONTENT='8;URL=visaoAdministrador/visaoMenuAdministrador.php'>"; //Depois de logado ele ira reportar para página visaoMenuAdministrador.php onde vai ser fechado por sessões.
                            break;
                        case 'Cliente':
                            echo '<div class="alert-cliente">Cliente Logado com Sucesso!!!!!!</div>';
                            echo "<meta HTTP-EQUIV='refresh' CONTENT='8;URL=visaoCliente/visaoMenuCliente.php'>";
                            break;
                        case 'Socio':
                            echo '<div class="alert-socio">Socio Logado com Sucesso!!!!!!</div>';
                            echo "<meta HTTP-EQUIV='refresh' CONTENT='8;URL=visaoSocio/visaoMenuSocio.php'>";
                            break;
                    }

 

Share this post


Link to post
Share on other sites

Perceba que o que está realizando é apenas um redirect. Entretanto, não deve-se imprimir HTML no controller. Utilize header no lugar:

header("Location: url.php");

 

Share this post


Link to post
Share on other sites

Está bem Gabriel vou efetuar a troca, mas em relação como vou restringir uma  pagina usando sessão num método existente no controle para que possa depois q ele reportar para pagina redirecionada pelo header location ficar restrita.

Share this post


Link to post
Share on other sites

Se você quer fazer a validação do nível, faça dentro do controller.

O controller é responsável por controlar a view, então, seguindo esta linha de raciocínio... Se usuário tem permissão, exiba a página, se não, redirecione para a página bloqueada, me parece coerente colocar esta validação dentro da própria action no controller.

Share this post


Link to post
Share on other sites

Se quiser exibir uma mensagem temporária e, então, redirecionar, crie uma view específica para isso.

 

Entretanto, é totalmente desnecessária uma mensagem apenas para informar que o usuário está logado (pense em user experience), sendo que, em caso de sucesso, ele será redirecionado para a página de acesso ou continuará na página de login (então sim, será exibido a mensagem de usuário não autorizado).

Share this post


Link to post
Share on other sites
13 horas atrás, Mateus Silva disse:

Se você quer fazer a validação do nível, faça dentro do controller.

O controller é responsável por controlar a view, então, seguindo esta linha de raciocínio... Se usuário tem permissão, exiba a página, se não, redirecione para a página bloqueada, me parece coerente colocar esta validação dentro da própria action no controller.

 

Mateus quando o usuário não tem permissão de exibir a pagina eu reporto ele de novo para a pagina index.php, mas ele tem permissão eu mando para a pagina restrita. Será que isso está correto?

Share this post


Link to post
Share on other sites
6 horas atrás, Gabriel Heming disse:

Se quiser exibir uma mensagem temporária e, então, redirecionar, crie uma view específica para isso.

 

Entretanto, é totalmente desnecessária uma mensagem apenas para informar que o usuário está logado (pense em user experience), sendo que, em caso de sucesso, ele será redirecionado para a página de acesso ou continuará na página de login (então sim, será exibido a mensagem de usuário não autorizado).

 

Gabriel  então ficaria legal se eu criar uma pagina para mostrar um erro de login ou  na hora de redimensionar para outra pagina criaria uma pagina intermediaria para mostra uma mensagem que foi logado com sucesso ficaria correta na sua opinião?.

Share this post


Link to post
Share on other sites

A página de erro de login deve ser na mesma página aonde o usuário insere seu usuário e senha. Veja, por exemplo, o acesso de algum e-mail (gmail, hotmail, ymail, etc...). Caso não efetuar o login, você continua na página de login, exibindo uma mensagem de erro de acesso.

 

Quanto a página intermediária, é "ok" do ponto de vista da programação. Eu apenas acho ela totalmente desnecessária.

Share this post


Link to post
Share on other sites
47 minutos atrás, Gabriel Heming disse:

A página de erro de login deve ser na mesma página aonde o usuário insere seu usuário e senha. Veja, por exemplo, o acesso de algum e-mail (gmail, hotmail, ymail, etc...). Caso não efetuar o login, você continua na página de login, exibindo uma mensagem de erro de acesso.

 

Quanto a página intermediária, é "ok" do ponto de vista da programação. Eu apenas acho ela totalmente desnecessária.

 

Parece que você leu meus pensamentos eu tava justamente olhando estes sites neste momento e fiz igual a eles quando eu logar e der o login errado eu crio uma mensagem na pró pia pagina de login dizendo o seguinte : "USUÁRIO OU SENHA ESTÃO INCORRETAS",  mas quando o login estiver certo eu imprimo uma mensagem com os seguintes dizeres "AGUARDE REDIRECIONANDO PARA PAGINA DO ADMINISTRADOR!!!" . Isso está correto amigo?

Share this post


Link to post
Share on other sites

Entenda que não posso dizer que está correto, mas também não é errado. Tendo ou não uma tela intermediária, estará correto. É apenas desnecessário ter essa tela.

 

Da mesma forma que, quando você loga em no e-mail, ele aparece a mensagem de boas vindas e te redireciona ou apenas te manda para a onde você entrou?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.