"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" => "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" => "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, ); } } } }