Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde Galera , tudo bom ?
Estou tentando fazer um menu dinamico com laravel , onde cada usuario terá permissão para visualizar partes do menu.
Até o momento , tenho criado as tabelas :
User;
GroupUser;
Menus;
SubMenus;
MenuPermissao;
SubMenuPermissao;
Na tabela Menu , tenho o titulo de cada Menu ;
Na tabela de Sub Menu , tenho o id do menu correspondente e o titulo do sub menu.
Na tabela de Menu permissao , tenho o ID do Menu principal e o ID do grupo de usuario;
Na tabela de SubMenuPermissao , tenho o Id do sub menu e o Id do grupo de usuario.
Assim , um GRUPO de usuario pode ter acesso a varios Menus que por sua vez contem varios submenus.
Nos meu models , tenho o seguinte:
class GroupUser extends Model
{
protected $table = 'GroupUser';
protected $fillable = ['name'];
public function getUser(){
return $this->hasMany('HenriqueFelix\User','group_id');
}
public function getMenus(){
return $this->belongsToMany('HenriqueFelix\Menu', 'menu_permissoes', 'group_id', 'menu_id');//pega todos os menus relacionados a esse grupo
}
public function getSubMenus(){
return $this->belongsToMany('HenriqueFelix\SubMenu', 'sub_menu_permissoes', 'group_id', 'sub_menu_id'); //pega todos os subMenus relacionados a esse grupo
}
}
>
class Menu extends Model
{
protected $table = 'menus';
protected $primaryKey = 'id';
public function getSubMenus(){
return $this->hasMany('HenriqueFelix\SubMenu' , 'menu_id');
}
public function groupsUser(){
return $this->belongsToMany('HenriqueFelix\GroupUser', 'menu_permissoes', 'menu_id', 'group_id'); //pega todos usuarios relacionados e esse menu
}
}
>
class SubMenu extends Model
{
protected $table = "sub_menus";
public function getMenu(){
return $this->belongsTo('HenriqueFelix\Menu' ,'id');
}
public function groupsUser(){
return $this->belongsToMany('HenriqueFelix\GroupUser', 'menu_permissoes', 'menu_id', 'group_id'); //pega todos usuarios relacionados e esse menu
}
}
Gostaria de poder listar todos os Menus junto dos SubMenus pertencentes a ele em que X grupo de usuario possui acesso.
Ex: Usuario : Henrique - Grupo 1 ( administrador )
O grupo administrador pode acessar o menu Relatorios -> usuarios , logs , produtos ( sao os submenus ) ; Ferramentas-> usuarios , produtos , paginas ( submenus ).
Alguem pode ajudar a fazer as relações corretamente nos models ?
Ps.: Estou buscando e tentando listar os dados da seguinte maneira:
$menu = GroupUser::find($id)->with('getMenus')->with('getSubMenus')->firstOrFail();
@for($i = 0; $i < count($menu->getMenus); $i++)
{{ $menu->getMenus[$i]->name}}
{{ $menu->getMenus[$i]->getSubMenus[0]->name }} <br>
@endfor
Se nessa parte 'getSubMenus[0]->name' eu deixo exatamente dessa forma , o laravel da Erro , se eu tiro o [0]->name , ele lista , mas tudo fora de ordem .
Desde ja , grato
Boa tarde ,
e como você recomendaria que fosse feito as tabelas ? Teria algum exemplo ?
Desde ja , grato
A organização que você quer, deve ser feita através da recursividade, ou seja, deve referenciar (parent) a si mesmo, conforme comentado no post #2.
Quanto a quantidade de níveis, você limita isso na programação, pois a recursividade lhe fornece "níveis infinitos", mas se quiser apenas dois, limite isso no seu código.
Já as permissões, são baseadas apenas na relação de uma tabela.
Minha tabela
/applications/core/interface/imageproxy/imageproxy.php?img=http://puu.sh/mbI3d/5c2316ecec.png&key=e69693c9c1863f71500f1e3f64357616ada7689b0e33ad235ee411ff3b470637" alt="5c2316ecec.png" />
como viu eu tenho um grupo no menu e neles que eu decido quem verá o menu..
/applications/core/interface/imageproxy/imageproxy.php?img=http://puu.sh/mbI8B/d7a64b2449.png&key=62b80f0cfb76ac3665e19a4c91041a6091fbd9ae2f67ca99b0f56f90936b29d3" alt="d7a64b2449.png" />
aí é só pensar um pouco e planejar como editar etc..
no caso eu uso tudo dinâmico o menu, é arrastar e soltar que muda a posição etc.
Acho que esse forma que você está trabalhando com o menu está meio errada..
normalmente usa só uma tabela para menu.. nela tem o parent_id do menu e no caso nivel também
nivel do menu se ele é para user mod ou admin..
fora que um simples select faria tudo..
simplificaria sua vida :D