Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

P3rukao

Abrix conexão manual no controller

Recommended Posts

Daew,

estou tentando utilizar um component para saber se um usuário está logado na página (tentando reaproveitar uma classe que já tenho, que uso nas páginas com php puro), e nessa minha classe (agora component) é necessário que se abra uma conexão para se verificar o status do usuário (logado ou não).

 

Ainda estou penando com esse cake... =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve importar o model que você quer e criar uma nova instancia ou... Você pode tentar (tentar porque depende de quem chama o componente) chamar o Model que está dentro do controller que você chamou o component... what? (Não eu entendi isso hehe)

Bom. O primeiro:

App::import('Model', 'Usuario');
$user = new Usuario();
$user->find(...

E o segundo:

Quando um controller chama um componente, uma instancia deste controller ficará disponivel em seu component.

Tendo o controller em mãos, você, consequentimente, terá os models deste controller.

 

Como acessar este controller então?

Os components, teem um método que servem como um tipo de construtor, o startup(). Ele recebe 2 parametros. O primeiro é a instancia do controller.

Então, em seu componente, basta:

function startup(&$controller, $opts = array()){
        $this->controller =& $controller;
        $this->userModel =& $controller->User;
    }
... continua normalmente seu component

//$this->userModel->find('...');

Espero que não tenha ficado complicado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Deu pra entender sim lucas... vlw xD

 

Eu só não sei se abrir manualmente é a melhor opção pra mim.

 

O lance é o seguinte:

Em meu template, tem uma parte que exibe um determinado conteúdo se o usuário estiver logado, sinão mostra outro (Pra ser mais exato, é o mesmo que acontece no canto superior direito desse site, onde dá acesso ao perfil e painel de controle do usuário).

Ainda estou estudando sobre o uso do Auth componente, mas por enquanto queria saber o quanto que posso "reaproveitar" do scripts que já tenho, e que uso no "php puro", que nesse caso seria uma classe de login com gravação de cookies.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode utilizar um element.

Um box (como element) para quando tiver logado, e outra caso não esteja.

Aí:

if($this->isLogged()){
     $element = 'logged';
}else{
     $element = 'unlogged';
}

$this->set('element', $element);

View:

<h1>Usuarios</h1>
<?php echo $this->element($element); ?>

Aí, se está logado ou não, irá exibir o elemento respectivo desta forma

Compartilhar este post


Link para o post
Compartilhar em outros sites

O isLogged foi so um exemplo =P

Malz por não falar.

 

Mas tem um modo, com o proprio auth component, de saber se o user está logado:

function isLogged(){
        return (bool)$this->Auth->user('id');
    }

Agora sim o isLogged existe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

rsrsrs... eu tinha entendido Lucas... só perguntei pra ter certeza msm xDD

 

mas, em relação ao auth component, eu tenho uma situação em que tenho dois paineis administrativos. Um para o administrador do site, e outro para o cliente do site.

Eu estava querendo utilizar com a classe que já tenho, pois já sei como fazer e está funcionando direitinho.

Mas como que eu poderia fazer essa autenticação com o Auth Component, para os dois sistemas sem dar conflito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um para o administrador do site, e outro para o cliente do site.

Como você fez isso? Utilizando os Prefixes certo?

 

Mas como que eu poderia fazer essa autenticação com o Auth Component, para os dois sistemas sem dar conflito?

COmo assim? Oque você precisa exatamente?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como você fez isso? Utilizando os Prefixes certo?

Eu fiz isso, mas não foi no cake naum... no php puro mesmo... cada página acessando uma página de validação diferente...

 

 

Mas como que eu poderia fazer essa autenticação com o Auth Component, para os dois sistemas sem dar conflito?

COmo assim? Oque você precisa exatamente?

Tipo assim: eu tenho duas áreas no site: /adiministracao, e /painel.

onde o /painel é onde o cliente tem acesso aos conteúdos dele..

e o /adiministracao é para o gerenciamento geral do site.

 

Eu já li a respeito, mas em todo lugar que vejo, é uma complicação da bixiga, com esse Auth Component e e o ACL. Mas não achei nada em relação a esse meu problema.

 

Os usuário estão em tabelas separadas... uma para os clientes e outro para os administradores do site.

 

 

Deu pra entender agora ou eu compliquei mais Ô.õ_ ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se estão em tabelas separadas fica até mais fácil.

Aconselho utilizar os prefixes, um "administracao" e outro "painel", aí suas action:

function painel_nomeDaAction()...
Ou:

function administracao_nomeDaAction()...

Os prefixes so estão disponiveis no Cake 1.3+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bacana Lucas,

eu andei olhando uns tutos teus e de outros na web, e até consegui fazer funcionar UMA area restrita... mas foi utilizando o controller do usuário.... tipo: site/usuarios/login...

mas como eu falei, estou querendo que seja nos dois esquemas: "administracao" e "painel"...

Nesse caso, eu teria que criar models e controllers "fictícios" para essas áreas restritas, para que pudesse, assim, ficar: painel/addPost, administracao/listarUsuarios,...,etc?

 

E... para a criação desse meu primeiro painel, eu fiz umas configurações na app_controller, como $this->Auth->userModel = 'Usuario'; e $this->Auth->fields = array('username' => 'login', 'password' => 'senha');

 

Porém como eu vou estar usando duas tabelas, para cada usuário do site (cliente e administradores), como que eu deveria fazer essa configuração do Auth Component? Ao invés de por na app_controller, colocar só na minha controller em questão: administracao e painel???

 

E... eu andei pensando em fazer alterações nessas tabelas de usuarios, mas queria manter o mesmo esquema para os clientes e administradores, então, nesse caso o $this->Auth->userScope serviria para mim poder condicionar a seleção do usuário, como por níveis de acesso por exemplo?

 

 

ufa!! epero que você posssa me esclarecer essas dúvidas.. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porém como eu vou estar usando duas tabelas, para cada usuário do site (cliente e administradores), como que eu deveria fazer essa configuração do Auth Component? Ao invés de por na app_controller, colocar só na minha controller em questão: administracao e painel???

Basta fazer um IF, se estiver no prefixo "administracao" configura de um jeito se estiver com o prefixo "painel" de outro.

O CakePHP tem esta propriedade Controller::$params, deste modo você pode saber qual prefixo esta. Se for o administacao, você acessará:

$this->params['administracao']; // true
ou
$this->params['painel'];

Então:

if($this->params['administracao']){
   //configura de um jeito
}elseif($this->params['painel']){
  // configura de outro
}else{
  // se não tiver prefixos, cai aqui...
}

E... eu andei pensando em fazer alterações nessas tabelas de usuarios, mas queria manter o mesmo esquema para os clientes e administradores, então, nesse caso o $this->Auth->userScope serviria para mim poder condicionar a seleção do usuário, como por níveis de acesso por exemplo?

Suponho que sim, mas... o ideal seria utilizar ACL..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas nesse caso, esses params só seriam 'setados' se eu tentar, por exemplo, acessar /meusite/meucontroller/administracao_add/?

Pois eu coloquei o condicional em minha app_controller, mas retorna como se não existisse esses dois parametros...

 

e em todas as páginas, só pra debug, se eu faço print_r($this->params); dá pra ver que os tais parâmetros nunca aparecem...

 

Eu acho que não saquei mto... =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eles aparecerão quando você estiver na área com prefixo, por isso é aconselhavel utilizar isset.

E a url correta é: /meusite/meucontroller/administracao/add e não /meusite/meucontroller/administracao_add (pra isso servem os prefixos)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.