Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia,
Me deparei com a seguinte necessidade, tenho que montar um formulário na view para a ação "add" que adiciona novos usuários e também onde devo definir algumas permissão de acesso para esse usuário. Imagine que essas permissões são listadas na mesma tela de cadastro do usuário na forma de checkbox e elas deve ser dinâmicas, pois estão cadastradas na base de dados e podem ser alteradas adicionando ou removendo.
Então eu tenho três tabelas na base de dados envolvidas, "Usuarios","UsuariosXPermissoes" e "Permissoes"..
Pergunto..
1 - Como fazer para que a exibição dessas checkbox representando as permissões apareçam de forma dinâmica na view add ?
2 - Como salvar as permissões selecionadas relacionando o usuário com as permissões na tabela "UsuariosXPermissoes" ?
Obrigado
Boa noite,
Caras a saindo, vou colocar meu código..
Bom minha estrutura é a seguinte no banco Usuarios, UsuariosEstruturas e Estruturas.. É um relacionamento de muitos para muitos... Então no formulário de cadastro de usuários preciso exibir depois dos campos relacionados ao cadastro de usuários uma listagem de Estruturas que o usuário pode ou não acessar. O cara que estiver cadastrando o novo usuário vai poder ticar nos checkbox para definir as estruturas que esse usuário vai possuir e essas serão salvas na tabela UsuariosEstruturas.
Para seguir os passo, gostaria primeiramente montar o formulário, hoje a view add do Usuários funciona, preciso adicionar a lista de checkbox de permissões para seleção. Depois ver como posso salvar as selecionadas na tabela UsuariosEstruturas.
Valeus
Meus controles hoje estão assim:
A Controller do Usuarios
>
<?php
class UsuariosController extends AppController{
var $name = 'Usuarios';
var $helpers = array( 'Html' , 'Form' , 'Javascript' , 'Ajax' );
var $components = array( 'RequestHandler' );
var $uses = array( 'Usuario', 'Estrutura' );
function index(){
$this->layout = 'Usuario';
$this->set( 'Usuarios' , $this->Usuario->find('all'));
}
function add(){
$this->set( 'Estrutura', $this->Estrutura->Tag->find('list') );
$this->layout = 'Usuario';
if( $this->Usuario->save( $this->data ) ){
$this->Session->setFlash( 'Seus dados foram salvos com sucesso!' );
//$this->redirect( array( 'action' => 'index' ) );
}
}
}
>
A Controller da Estrutura
<?php
class EstruturasController extends AppController{
var $name = 'Estruturas';
var $helpers = array('Javascript');
function index(){
$this->set( 'Estruturas' , $this->Estrutura->find('all'));
}
function add(){
if( $this->Estrutura->save( $this->data ) ){
$this->Session->setFlash( 'Seus dados foram salvos com sucesso!' );
$this->redirect( array( 'action' => 'index' ) );
}
}
}
?>
A View de cadastro do usuário
>
<?php
print $javascript->link( 'jquery' , false );
print $javascript->link( 'jquery.maskedinput-1.2.2' , false );
print $javascript->link( 'prototype' );
print $javascript->link( 'scriptaculous' );
print $javascript->link( 'modal' );
print $javascript->codeBlock('jQuery(function($){
$("#UsuarioDtNascimento").mask("99/99/9999"); });', null);
print $ajax->form( 'add' , 'post' , array( 'model'=>'Usuario' ) );
print $form->input( 'id_cadastro' , array( 'type' => 'hidden' ) );
print $form->input( 'dt_cadastro' , array( 'type' => 'hidden' , 'value' => date( "Y-m-d G:i:s" ) ) );
print $form->input( 'id_atualizacao' , array( 'type' => 'hidden' ) );
print $form->input( 'dt_atualizacao' , array( 'type' => 'hidden' , 'value' => date( "Y-m-d G:i:s" ) ) );
print $form->input( 'id_cancelados' , array( 'type' => 'hidden' , 'value' => '' ));
print $form->input( 'ds_nome' , array( 'type' => 'text', 'label' => 'Nome ' , 'size' => 50 , 'class' => 'classInput' ) );
print $form->input( 'ds_sobrenome' , array( 'type' => 'text' , 'label' => 'Sobrenome ' , 'size' => 50 , 'class' => 'classInput' ) );
print $form->input( 'dt_nascimento' , array( 'type' => 'text' , 'label' => 'Nascimento ' , 'size' => 20 , 'class' => 'classInput' ) );
print $form->input( 'ds_email' , array( 'type' => 'text' , 'label' => 'Email ' , 'size' => 50 , 'class' => 'classInput' ) );
print $form->input( 'ds_password' , array( 'type' => 'password' , 'label' => 'Senha ' , 'size' => 20 , 'class' => 'classInput' ) );
print $form->input( 'bt_ativo' , array( 'type' => 'select' , 'label' => 'Status ', 'options' => array( 'S' => 'Ativo' , 'N' => 'Inativo' ) ));
print $form->end( 'Salvar' );
print $html->link( 'Voltar' , array( 'action' => 'index' ) );
?>
Olá,
A sugestão que eu te dou é você trabalhar com relacionamento HasAndBelongsToMany, vai o link onde você encontra maiores explicações:
http://book.cakephp.org/pt/view/83/hasAndBelongsToMany-HABTM
E a maior graça do cakephp é com uma simples linha você altera um campo "select options multiple" para "checkbox multiple":
http://book.cakephp.org/pt/view/193/options-multiple