"dashboard", "description" => "Dashboard", "bits" => Permission::ALL_PERMS, "children" => [], ], [ "scope" => "config", "description" => "Configurações", "bits" => Permission::MENU | Permission::VIEW, "children" => [ [ "scope" => "config.user", "description" => "Configurações de Usuários", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "config.permission", "description" => "Configurações de Permissões", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "config.city", "description" => "Configurações de Cidades", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "config.country", "description" => "Configurações de Países", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "config.state", "description" => "Configurações de Estados", "bits" => Permission::CRUD, "children" => [], ], ], ], [ "scope" => "parceiro", "description" => "Parceiros e Convênios", "bits" => Permission::MENU | Permission::VIEW, "children" => [ [ "scope" => "parceiro.convenio", "description" => "Gestão de Parceiros/Convênios", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "parceiro.servico", "description" => "Serviços dos Parceiros", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "parceiro.carteirinha", "description" => "Gestão de Carteirinhas", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "parceiro.agendamento", "description" => "Agendamento de Serviços", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "parceiro.dados", "description" => "Dados dos Parceiros", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "parceiro.notificacao", "description" => "Notificações dos Parceiros", "bits" => Permission::CRUD, "children" => [], ] ], ], [ "scope" => "loja", "description" => "Loja", "bits" => Permission::MENU | Permission::VIEW, "children" => [ [ "scope" => "loja.item", "description" => "Itens da Loja", "bits" => Permission::CRUD, "children" => [], ], [ "scope" => "loja.pedido", "description" => "Pedidos da Loja", "bits" => Permission::CRUD, "children" => [], ], ], ], [ "scope" => "agendamento", "description" => "Agendamentos", "bits" => Permission::ALL_PERMS, "children" => [], ], [ "scope" => "notificacao", "description" => "Notificações", "bits" => Permission::ALL_PERMS, "children" => [], ], [ "scope" => "associado", "description" => "Associado", "bits" => Permission::MENU | Permission::VIEW, "children" => [ [ "scope" => "associado.perfil", "description" => "Meu Perfil do Associado", "bits" => Permission::VIEW | Permission::EDIT, "children" => [], ], [ "scope" => "associado.carteirinha", "description" => "Carteirinha do Associado", "bits" => Permission::VIEW, "children" => [], ], [ "scope" => "associado.convenio", "description" => "Convênios do Associado", "bits" => Permission::VIEW, "children" => [], ], [ "scope" => "associado.dependente", "description" => "Dependentes do Associado", "bits" => Permission::CRUD, "children" => [], ], ], ], [ "scope" => "categoria", "description" => "Categorias", "bits" => Permission::CRUD, "children" => [], ], ]; $this->createPermissionsAndChildren(permissions: $permissions); } private function createPermissionsAndChildren( array $permissions, ?Permission $parent = null, ): void { foreach ($permissions as $permissionData) { $children = $permissionData["children"]; unset($permissionData["children"]); $permissionNode = Permission::updateOrCreate( ["scope" => $permissionData["scope"]], $permissionData, ); if ($parent) { $parent->appendNode($permissionNode); } if (!empty($children)) { $this->createPermissionsAndChildren( permissions: $children, parent: $permissionNode, ); } } } }