Como empregar autenticação mais avançada (por grupos)?

43 views
Skip to first unread message

Thiago de Oliveira

unread,
Dec 18, 2009, 1:01:17 AM12/18/09
to Cake PHP Português
Olá pessoal!

Preciso de ajuda para criar uma solução viável na parte de segurança,
tenho pouca experiência com desenvolvimento.


A situação:

Quando elaborei a primeira versão da regra de negócio do meu sistema
foquei somente nos requisitos de minha aplicação
desprezando inicialmente a questão da autenticação e segurança (ACL).
Para versão teste empreguei a forma mais simples de autenticação no
cake (Auth) usando somente uma tabelinha de usuarios,
"id","login","senha".
Agora depois de cumprir com os requisitos da primeira versão é hora de
aumentar o escopo da aplicação com diferentes tipos de usuários e
funções, estou estudando como empregar autenticação de uma forma mais
avançada, ou seja, Tenho usuários em vários níveis no sistema, preciso
que o sistema autentique e redirecione o usuário de acordo com o grupo
ao qual pertence, sei que tem existir a tabela grupo e a tabela
usuário mas não sei usar, (DEU UM BRANCO TOTAL) como faço o
redirecionamento? considerando que cada grupo de usuário incluindo o
adminstrador do sistema deverá ter um painel específico com suas
funções.

Questões a respeito:
1)Devo continuar com o 'Auth' sendo que existem outros métodos de
autenticação?
2)Qual dos métodos de autenticação combina melhor com o sistema de
ACL?
3)Como faço redirecionamento meu deus!? (se tiverem uma manha?)
4)Porque deram a um dragão de sete cabeças o nome de ACL? (Que mostre
a 'cripitonita' deste dragão quem a possuir )

Me ajudem!
Um dia prometo que escreverei um livro com o nome "Boas Práticas no
CakePHP".
Farei uma singela homenagem a cada participante desta postagem.

A todos os garotos de programa
Muito Obrigado!

Thiago de Oliveira

Edinei Luis Cipriani

unread,
Dec 18, 2009, 5:34:56 AM12/18/09
to cake-...@googlegroups.com
Primeiro ACL não é um componente de autenticação, e sim um controle de
acesso que trabalha junto com Auth, esse sim é um componente de
autenticação.

O ACL + Auth funcionam da seguinte forma:

O ACL vai pegar o seu id de grupo ou de usuário (ARO), e verificar
quais deles tem acesso aos (ACOS), veja que existe uma tabela de
ligação com aros_acos...

Os acos e aros utilizam uma estrututa re árvove:

exemplo de aco:

controller
cursos
index
editar
excluir
$usuario = 1;
Se você der permissão para o usuario: $this->Acl-
>alow($usuario,'controller');

Esse usuário terá permissão de root, uma vez que o controller é a raiz
de nosso controle de negocio.


Agora supomos que esse usuario tenha acesso a raiz, mas não quero que
ele tenha permissão para editar e excluir os cursos do sistema:
$this->Acl->denny($usuario,'Cursos/editar');
$this->Acl->denny($usuario,'Cursos/excluir');


Dessa forma quando o usuário requesitar a action Cursos/editar ou
Cursos/excluir, o acl vai bloquear o acesso desse usuário, as actions
desse controller.

Eu aprendi ACL com esse tutorial: http://mark-story.com/posts/view/auth-and-acl-an-end-to-end-tutorial-pt-1

e para fazer redirecionamento, utilize o metodo redirect do controller:
$this->redirect(array(controller, action))....

Espero ter ajudado.

Jóia?

T+

> --
>
> Você está recebendo esta mensagem porque se inscreveu no grupo "Cake
> PHP Português" dos Grupos do Google.
> Para postar neste grupo, envie um e-mail para cake-...@googlegroups.com
> .
> Para cancelar a inscrição nesse grupo, envie um e-mail para cake-php-pt...@googlegroups.com
> .
> Para obter mais opções, visite esse grupo em http://groups.google.com/group/cake-php-pt?hl=pt-BR
> .
>
>

Thiago de Oliveira

unread,
Dec 18, 2009, 7:23:15 AM12/18/09
to cake-...@googlegroups.com
Olá Edinei!

Com certeza ajudaste a esmagar umas cinco cabeça deste Dragão de cara.

Esta tudo muito claro a função do Auth e do ACL no manual só não tinha visualizado uma combinação entre os dois.
ja havia incluído na minha modelagem as tabelas do ACL(aros, aros_acos, acos).

Uma das minhas dúvidas seria se eu deveria ligar a tabela usuários "na qual serve para exclusivamente para autenticações" com as tabelas pertinentes aos grupos de usuarios ou se somente usado o componente ACL mataria a charada! 
EX:
usuario_id em Alunos, usuario_id em Instrutores assim por diante.
(tenho a nitida sensação de esta fazendo uma pedreragem desta forma.) 
 
Contudo vou estudar o que me mandaste a fundo, se pintar uma duvida pingo aqui de novo.

Brigadão valeu! abraço.

Thiago de Oliveira




2009/12/18 Edinei Luis Cipriani <phpe...@gmail.com>

Edinei Luis Cipriani

unread,
Dec 18, 2009, 8:32:35 AM12/18/09
to cake-...@googlegroups.com
Então amigo, 

vc tera q ter uma tabela usuarios, onde o model sera Instrutor e Aluno e vai usar a tabela usuarios, assim fica mais fácil de manter o sistema.

O acl não vai fazer isso, ele apenas vai dizer se o cara tem ou não permissão.

Por exemplo, o usuario_id = 5 é um professor, ele tem permissao de fazer chamada, o aluno porém, tem permissão apenas de visualizar suas presenças.

Está fazer um sistema escolar?

Eu possuo 1.
Reply all
Reply to author
Forward
0 new messages