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