"dashboard", "description" => "Dashboard", "bits" => 511, "children" => [], ], [ "scope" => "config", "description" => "Configurações", "bits" => 271, "children" => [ [ "scope" => "config.user", "description" => "Configurações de Usuários", "bits" => 271, "children" => [], ], [ "scope" => "config.permission", "description" => "Configurações de Permissões", "bits" => 271, "children" => [], ], [ "scope" => "config.address", "description" => "Configurações de Endereços", "bits" => 271, "children" => [], ], [ "scope" => "config.city", "description" => "Configurações de Cidades", "bits" => 271, "children" => [], ], [ "scope" => "config.client", "description" => "Configurações de Clientes", "bits" => 271, "children" => [], ], [ "scope" => "config.client_favorite_provider", "description" => "Configurações de Prestadores Favoritos do Cliente", "bits" => 271, "children" => [], ], [ "scope" => "config.client_payment_method", "description" => "Configurações de Métodos de Pagamento do Cliente", "bits" => 271, "children" => [], ], [ "scope" => "config.schedule", "description" => "Agendamentos", "bits" => 271, "children" => [], ], [ "scope" => "config.custom_schedule", "description" => "Oportunidades (Agendamentos Personalizados)", "bits" => 271, "children" => [], ], [ "scope" => "config.schedule_proposal", "description" => "Propostas de Agendamento", "bits" => 271, "children" => [], ], [ "scope" => "config.schedule_refuse", "description" => "Recusas de Agendamento", "bits" => 271, "children" => [], ], [ "scope" => "config.country", "description" => "Configurações de Países", "bits" => 271, "children" => [], ], [ "scope" => "config.state", "description" => "Configurações de Estados", "bits" => 271, "children" => [], ], [ "scope" => "config.provider", "description" => "Configurações de Prestadores", "bits" => 271, "children" => [], ], [ "scope" => "config.provider_speciality", "description" => "Configurações de Especialidades do Prestador", "bits" => 271, "children" => [], ], [ "scope" => "config.provider_services_types", "description" => "Configurações de Tipos de Serviços do Prestador", "bits" => 271, "children" => [], ], [ "scope" => "config.provider_payment_method", "description" => "Configurações de Métodos de Pagamento do Prestador", "bits" => 271, "children" => [], ], [ "scope" => "config.provider_working_day", "description" => "Configurações de Dias de Trabalho do Prestador", "bits" => 271, "children" => [], ], [ "scope" => "config.provider_blocked_day", "description" => "Configurações de Dias Bloqueados do Prestador", "bits" => 271, "children" => [], ], [ "scope" => "config.improvement_type", "description" => "Configurações de Tipos de Melhoria", "bits" => 271, "children" => [], ], [ "scope" => "config.media", "description" => "Configurações de Mídia", "bits" => 271, "children" => [], ], [ "scope" => "config.service_type", "description" => "Configurações de Tipos de Serviço", "bits" => 271, "children" => [], ], [ "scope" => "config.speciality", "description" => "Configurações de Especialidades", "bits" => 271, "children" => [], ], ], ], ]; $this->createPermissionsAndChildren(permissions: $permissions); } /** * Recursively creates or updates permissions and handles nesting. * * @param array $permissions The array of permission data. * @param Permission|null $parent The parent Permission object (for nested sets). */ 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, ); } } } }