[RESOLVIDO] 2 (dois) Login independente
#1
Posted 12 August 2010 - 08:40 AM
Andei pesquisando no fórum, e não encontrei nada concreto para que seja viável o funcionamento de 2 login distinto.
No Módulo "admin", está funcionando corretamente, desenvolvi um próprio 'RBAC' básico, com controle de "controller" e "action" SÓ, pois to tendo dificuldade de separar o login do "site" com o módulo "admin".
Vou desenvolver um site de orçamento online, e não queria usar 1 tabela de 'usuário' para cadastrar 'cliente' e/ou 'administradores', quero fazer uma coisa organizada.
Alguem tem alguma sugestão, para que eu consiga usar 2 componente de autenticação?
Att.,
Newerton Vargas de Araújo
Obs.: Alterei o título para fácil busca no fórum e nos buscadores externo.
#2
Posted 12 August 2010 - 11:15 AM
Na hora da autenticação faz um teste e verifica qual tipo ele é e redireciona para seu ambiente.
Railton
Newerton, on 12 August 2010 - 08:40 AM, said:
Andei pesquisando no fórum, e não encontrei nada concreto para que seja viável o funcionamento de 2 login distinto.
No Módulo "admin", está funcionando corretamente, desenvolvi um próprio 'RBAC' básico, com controle de "controller" e "action" SÓ, pois to tendo dificuldade de separar o login do "site" com o módulo "admin".
Vou desenvolver um site de orçamento online, e não queria usar 1 tabela de 'usuário' para cadastrar 'cliente' e/ou 'administradores', quero fazer uma coisa organizada.
Alguem tem alguma sugestão, para que eu consiga usar 2 componente de autenticação?
Att.,
Newerton Vargas de Araújo
#3
Posted 12 August 2010 - 01:19 PM
Railton Nepomuceno, on 12 August 2010 - 11:15 AM, said:
Na hora da autenticação faz um teste e verifica qual tipo ele é e redireciona para seu ambiente.
Railton
Então Railton,
No módulo /admin/ ta tudo funcionando, o problema que ocorre e o seguinte.
Tenho o /site/ e o /admin/, o /site e o padrão do Yii, so que o /admin/ é meu módulo.
Quando eu logo no /admin ele funciona normal, quando eu vou para o /site naquele menu padrão do Yii, no menu ao invés de [Login] está [Logout (newerton)].
O próprio sistema usa 1 componente so, o 'user', isso acontece se eu fizer ao contrário.
Se eu logar no /site como user: admin, password:admin, quando acesso o /admin, da erro de senha.
Queria poder usar dois "CUserIdentity" diferente, mais o 'components->user' não dá.
Vou postar umas print, do problema que ocorre.
Login da administração.

Logado na administração do site.

Depois de logado na administração, fica o logout no site
#4
Posted 12 August 2010 - 02:04 PM
twitter.com/nenhumnick
#5
Posted 12 August 2010 - 02:15 PM
Daniel A. Bastos, on 12 August 2010 - 02:04 PM, said:
Daniel,
É 1 modulo na mesma app, eu identifiquei o /site como exemplo só, mais existe 1 modulo so, o modules/admin.
Esse módulo ta normal, so que o 'Yii:app()->user' e usado para ambos, tanto para o modulo para o /site.
Eu não queria usar session ou cookie para autenticar o usuário no /site, mais até agora não achei solução para isso.
Vou explicar meio por cima um sistema que vou fazer:
Será cadastrado no Painel de Administração:
- Representantes
- Clientes
- Produtos
- Pedidos
Eu não quero usar 1 tabela, e definir permissão, quero deixar organizado o banco de dados, tipo: usuario, cliente, representante e assim sucessivamente.
Já procurei no forum e alguns dizem pra usar 1 tabela, e acrescentar o user_type, não acho correto isso.
This post has been edited by Newerton: 12 August 2010 - 02:22 PM
#6
Posted 12 August 2010 - 04:29 PM
Bom, respondendo a sua pergunta no começo, de usar 2 UserIdentity, vc pode fazer uma condicional e instanciar o UserIdentity que vc quer usar dentro do model LoginForm, no método "authenticate()".Pensei em fazer isso aqui, pois num projeto que desenvolvo, poderia se logar com LDAP ou usuário cadastrado no banco, dependendo das configs. Não é a mesma coisa que vc quer, mas, acho que a solução é a mesma. Acabou que fiz por outra solução e ficou só na idéia mesmo.
Quanto a login sem cookie, até dá .. mas vc vai ter que colocar na URL de todas as requisições do sistema com o identificador como parâmetro o que vai te gerar uma URL grande nada amigável ao usuário, além ser muito propenso a erros (Caso vc esqueça de adicionar o identificador em algum lugar, o seu sistema quebra)
twitter.com/nenhumnick
#7
Posted 12 August 2010 - 07:18 PM
Usuario do site irá acessar o admin normalmente ?
ou o usuario do site nem saberá do admin ?
se for assim nao precisa você se preucupar.
Onde se faz logout cria uma regra, que alem de estar logado o usuario necessita ser usuario do grupo site para valer no menu do site.
#8
Posted 12 August 2010 - 08:47 PM
Daniel A. Bastos, on 12 August 2010 - 04:29 PM, said:
Bom, respondendo a sua pergunta no começo, de usar 2 UserIdentity, vc pode fazer uma condicional e instanciar o UserIdentity que vc quer usar dentro do model LoginForm, no método "authenticate()".Pensei em fazer isso aqui, pois num projeto que desenvolvo, poderia se logar com LDAP ou usuário cadastrado no banco, dependendo das configs. Não é a mesma coisa que vc quer, mas, acho que a solução é a mesma. Acabou que fiz por outra solução e ficou só na idéia mesmo.
Quanto a login sem cookie, até dá .. mas vc vai ter que colocar na URL de todas as requisições do sistema com o identificador como parâmetro o que vai te gerar uma URL grande nada amigável ao usuário, além ser muito propenso a erros (Caso vc esqueça de adicionar o identificador em algum lugar, o seu sistema quebra)
Daniel,
Então eu queria pode deixar em uma tabela, mais a questão é que os dados da tabela usuario, tem dados que não há nescessidade de um representante ter.
"...Quanto a login sem cookie, até dá ...". Sem cookie não, com cookie.
Estava pensando em usar session ou cookie.
#9
Posted 12 August 2010 - 08:52 PM
Railton Nepomuceno, on 12 August 2010 - 07:18 PM, said:
Usuario do site irá acessar o admin normalmente ?
ou o usuario do site nem saberá do admin ?
se for assim nao precisa você se preucupar.
Onde se faz logout cria uma regra, que alem de estar logado o usuario necessita ser usuario do grupo site para valer no menu do site.
Isso Railton,
O usuário do site, não tem acesso ao admin.
Tem alguma regra no 'accessRules()' para que eu possa limita acesso aos modulos? Achei alguma coisa no forum, mais perdi a referencia.
#10
Posted 12 August 2010 - 09:13 PM
Vamos la.
table 'usuario'
( `codusuario` int(8) NOT NULL auto_increment, `codusuariocargo` int(8) NOT NULL, `nome` varchar(60) NOT NULL, `sobrenome` varchar(120) NOT NULL, `usuario` varchar(120) NOT NULL, `senha` varchar(40) NOT NULL, `email` varchar(120) NOT NULL, `liberar` int(1) NOT NULL, `datacriacao` datetime NOT NULL, `acesso` datetime NOT NULL, `ultimoacesso` datetime NOT NULL, `contaracesso` int(11) NOT NULL, `acessonicio` time NOT NULL, `acessofim` time NOT NULL, `ativarsenha` int(1) NOT NULL, `codtema` int(8) NOT NULL, PRIMARY KEY (`codusuario`) );
table 'usuariocargo'
`usuariocargo` ( `codusuariocargo` int(8) NOT NULL, `titulo` varchar(120) NOT NULL, `permissao` text NOT NULL, PRIMARY KEY (`codusuariocargo`) )
Essa tabela 'usuariocargo', e onde eu seto as permissões das controllers e actions, vou mostrar o print da tela no admin.


Após criar os cargo dos usuários, eu vou na página de usuário, e seto o cargo do usuário.

Essa tela mostra o erro que dá, quando um representante autentica no site, e tenta acessar o admin.

Meu 'accessRules()' do componentes/Controller.php
public function accessRules() {
$aRules = array();
if( isset(Yii::app()->user->codusuario) && Yii::app()->user->codusuario <> '') {
$cod = Usuario::model()->find('codusuario = ?', Yii::app()->user->getId());
if($cod->codusuariocargo <> 1) {
$group = UsuarioCargo::model()->find('codusuariocargo = ?', $cod->codusuariocargo);
$permissao = json_decode('['.$group->permissao.']');
foreach($permissao as $key => $value) {
$controllers = explode(',', $value->controllers);
if($value->controllers == '') {
$controllers = array('');
}
$actions = explode(',', $value->actions);
if($value->actions == '') {
$actions = array('index', 'view', 'create', 'update', 'delete', 'admin');
}
$rule = array('allow',
'controllers' => $controllers,
'actions' => $actions,
'users' => array(Yii::app()->user->usuario)
);
array_push($aRules, $rule);
}
} else {
array_push($aRules,
array('allow', // allow all users to perform 'index' and 'view' actions
'users'=>array(Yii::app()->user->usuario),
)
);
}
}
array_push($aRules,
array('allow', // allow all users to perform 'index' and 'view' actions
'actions'=>array('login', 'logout'),
'users'=>array('*'),
),
array('deny',
'users'=>array('*'),
)
);
return $aRules;
}
Eu gostaria de separar as autenticação do módulo admin, por que quando eu logo na administração com o usuário 'newerton', no fron-end, aparece como 'newerton' logado, não quero isso, no site só vai logar os representantes, não quero o usuário da administração logado no front-end, e assim vice e versa.
Agradeço a coomprensão de todos.
#11
Posted 13 August 2010 - 09:04 AM
Depois de uma boa durmida, a mente descansa bem para o trabalho.
Achei a solução dos meu problemas, espero que ajuda futuramente a todos.
A solução seria adicionar ao Controller do meu modulo a seguinte linha.
public function init()
{
Yii::app()->user->setStateKeyPrefix('_admin');
}
Caso seu Controller já tenha o init(), so adicionar:
Yii::app()->user->setStateKeyPrefix('_admin');E tem mais outro detalhe, no logout() da sua app,
mudar de:
Yii::app()->user->logout();
para:
Yii::app()->user->logout(false);
Agora eu consigo logar no Front-end, sem afetar o Back-end, o erro que postei na imagem não ocorre mais, e assim vice-versa, quando eu logo no Back-end, não afeta mais no Front-end.
Isso pode servir para quem deseja desenvolver um e-commerce, por que a tabela 'customers' e separado de 'users'.
Abraços.
Obs.:
Referência: http://www.yiiframew...administrators/
This post has been edited by Newerton: 13 August 2010 - 09:08 AM
#12
Posted 13 August 2010 - 11:02 AM
ele cria as sessões para o backend com nome diferentes do frontend.
Gostei da solução.
vou implementar no meu modulo administrativo isso tbm.
[]s
#13
Posted 13 August 2010 - 11:12 AM
no final, mudando o prefixo fica uma solução mais legal, pq vc pode definir um nome base..
twitter.com/nenhumnick
#14
Posted 13 August 2010 - 11:29 AM
O Yii::app()->user, é diferente tanto no /site quanto no /admin.
Bom para separar vários logins para cada módulo.
Bom para e-commerce.
#15
Posted 04 August 2012 - 07:58 AM
o teu index.php vai ser login page, depois de realizar o login reedirecciona para administração do site
Até aqui tudo bem !?? agora surge estas dúvidas !!! que mt gente já as colocou aqui !!!
1- O backend vai ter página login , como faço relativamente layout
2- Crio modulo admin
3- Crio layout geral para o admin e crio uma view mais especifica
Estou completamente baralhado .
#16
Posted 06 August 2012 - 02:55 PM
Vamos lá com suas dúvidas:
1- O backend vai ter página login , como faço relativamente layout
Procura no seu Controller qual o action que direciona para o login e adiciona a seguinte linha dentro do action:
$this->layout = 'login';
Ai você vai em layouts/ e cria o login.php
2- Crio modulo admin
Tenta usar o gii, abre sua aplicação, e adiciona localhost/seuprojeto/gii/, que vai ser direcionado a um sistema de geração de crud, modulos e por ae vai.
3- Crio layout geral para o admin e crio uma view mais especifica
Depois que você criar o modulo, poderár fazer um layout separado da aplicação front-end.
Referência: http://www.yiiframew.../en/topics.auth
This post has been edited by Newerton: 06 August 2012 - 02:55 PM

Help














