Marco,

isso é simples, nós que às vezes nos enrolamos no começo...

Resumidamente...

Faça a chamada do hook da forma indicada no manual do CI, por exemplo:

<?php

 $hook['post_controller_constructor'] = array(

'class'    => 'MyClass',

'function' => 'Myfunction',

'filename' => 'Myclass.php',

'filepath' => 'hooks',

'params'   => array('beer', 'wine', 'snacks')
                                                                );

?>

E, dentro da função "Myfunction" você usa um

function Myfunction(){
  if($this->uri->segment(1) == 'diretorio_x')
  {
    // código para checar autenticação
  }
}

O lance é o seguinte: dependendo o "tipo" de hook que você for usar
você não vai poder usar a classe URI, por exemplo, pois ela ainda não
foi carregada. Por isso eu aconselhei o "post_controller_constructor"
pois ele é executado antes dos teus métodos do controller e depois de
já ter carregado as classes básicas: uri, database, etc...

Ficou mais claro?? Só quis expor a idéia... Use a sua criatividade!

Boa noite,
Pedro.

Em 08/04/08, Marco Telles <[EMAIL PROTECTED]> escreveu:
> Oi Pedro, acabei voltando ao método anterior de verificar em cada
>  controller.
>  Não entendi muito bem o lance do hook. Eu havia feito no
>  'post_controller_constructor' só que dava erro em outras chamadas a
>  minhas classes e achei melhor deixar quieto.
>  Quem sabe quando eu tiver mais algumas horas de voo no CI eu possa me
>  aventurar nessas coisas mais complexas. :D
>
>
>
>  Muita sorte para nós!
>
>  Marco Telles
>
>
>
>
> Pedro Vasconcelos escreveu:
>
> > Bom, talvez eu esteja atrasado nessa discussão (tenho estado muitoooo
>  > ocupado)... Mas vamos lá!
>  >
>  > Marco,
>  >
>  > uma maneira simples de fazer isso é criar um hook, por exemplo o
>  > post_controller_constructor que, se não me engano é o primeiro na
>  > hierarquia de execussão após iniciar as classes "default" como a URI,
>  > e, na função que o hook roda você restringir o código de autenticação
>  > apenas para o usuário que acessar o diretório da administração.
>  >
>  > Veja bem que isso pode não ser tão seguro, dependendo das suas
>  > configurações...
>  >
>  > Depois diz pra gente qual solução você adotou!
>  >
>  > Boa sorte!
>  >
>  > Pedro.
>  >
>  > Em 08/04/08, *Marco Telles* <[EMAIL PROTECTED]
>
> > <mailto:[EMAIL PROTECTED]>> escreveu:
>
> >
>  >     É isso ai. Eu também acho legal discutir soluções, é uma forma de
>  >     compartilhar conhecimento.
>  >     Então, entendi sua idéia, mas como essa pasta dificilmente será
>  >     mudada,
>  >     acho que dá para aproveitar a idéia do Rafael, da seguinte forma:
>  >
>  >         function index() {
>  >            // se chamada for feita diretamente via url, retorna
>  >             redirect('subpasta/admin');
>  >         }
>  >
>  >     27    function init () {
>  >     28        $CI =& get_instance();
>  >     29        $pasta = $CI->uri->segment(1);
>  >     30        $metodo = $CI->uri->segment(3);
>  >     31        if ($pasta === 'subpasta' && $metodo !== 'login') {
>  >     32            $this->login("ENTROU");
>  >     33        }
>  >     34    }
>  >
>  >         function login( $entrou ) {
>  >             echo $entrou;
>  >         }
>  >
>  >     Aí surgiu um erro que não entendi.
>  >     Usei no hook a opção 'pre_controller', já que ela atua antes da
>  >     chamada
>  >     a nossos controllers e imediatamente após o carregamento das classes
>  >     base do CI, mas nesse caso dá um erro:
>  >
>  >     Severity: Notice
>  >     Message: Trying to get property of non-object
>  >     Filename: hooks/Auth.php
>  >     Line Number: 29
>  >     Fatal error: Call to a member function segment() on a non-object in
>  >     hooks/Auth.php on line 29
>  >
>  >     Se eu mudo a opção para 'post_controller_constructor' aí funciona. O
>  >     ideal não seria ter essa chamada antes de qualquer controlador meu ser
>  >     carregado ???
>  >
>  >
>  >     Abs
>  >
>  >
>  >     Edinho Almeida escreveu:
>  >
>  >     > Oi Marco,
>  >     >
>  >     > E se você definir no controller algo do tipo:
>  >     >
>  >     > subpasta/admin.php
>  >     > class Admin extends Controller{
>  >     >    public $requer_autenticacao = true; // funciona se logado e, se
>  >     > não, joga para o admin/login
>  >     >    ...
>  >     > }
>  >     >
>  >     > E testar esta propriedade no Hook ?
>  >     > if( isset($this->requer_autenticacao) AND
>  >     $this->requer_autenticacao === true ){
>  >     >
>  >     > }
>  >     > ficaria independente de sua estrutura de pasta.
>  >     >
>  >     > IMPORTANTE : Considere o código acima um 'brainstorm', provavelmente
>  >     > deverá ser adaptado.
>  >     > (gosto da idéia de trocarmos idéias e não somente soluções
>  >     resolvidas)
>  >     >
>  >     > Abs
>  >     > Edinho Almeida
>  >     >
>  >     > 2008/4/8 Marco Telles <[EMAIL PROTECTED]
>
> >     <mailto:[EMAIL PROTECTED]>>:
>
> >     >
>  >     >> Oi Rafael, eu 'capisce' sim  :)
>  >     >>
>  >     >>  Mas o admin apenas monta um menu que vai chamar vários
>  >     controllers. Se
>  >     >>  alguém acessar a url diretamente ele não vai bloquear, já que
>  >     não vem do
>  >     >>  admin. E aí seria o caso de ter um array com todos os
>  >     controllers para
>  >     >>  testar ? Seria a melhor solução ?
>  >     >>
>  >     >>  Outra opção, respondendo ao Edinho, pegar o segmento da
>  >     subpasta, já que
>  >     >>  todos os controllers do admin estão dentro dela. Seria uma boa
>  >     opção ???
>  >     >>
>  >     >>
>  >     >>  abs
>  >     >>
>  >     >>
>  >     >>
>  >     >>
>  >     >>
>  >     >>  _______________________________________________
>  >     >>  Lista mailing list
>
> >     >>  [email protected] <mailto:[email protected]>
>
> >     >>  http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>  >     >>
>  >     >>
>  >     >
>  >     >
>  >     >
>  >     >
>  >
>  >     _______________________________________________
>  >     Lista mailing list
>
> >     [email protected] <mailto:[email protected]>
>
> >     http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>  >
>  >
>  > ------------------------------------------------------------------------
>  >
>  > _______________________________________________
>  > Lista mailing list
>  > [email protected]
>  > http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>  >
>
>  _______________________________________________
>  Lista mailing list
>  [email protected]
>  http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br
>
_______________________________________________
Lista mailing list
[email protected]
http://codeigniter.com.br/mailman/listinfo/lista_codeigniter.com.br

Responder a