| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- <?php
- namespace Database\Seeders;
- use App\Models\Permission;
- use Illuminate\Database\Seeder;
- use App\Services\PermissionService;
- class PermissionSeeder extends Seeder
- {
- public function __construct(
- protected PermissionService $permissionService,
- ) {}
- public function run(): void
- {
- // Criação de Permissões
- /*
- view = 1
- add = 2
- edit = 4
- delete = 8
- print = 16
- export = 32
- import = 64
- limit = 128
- menu = 256
- para cada cada bit selecionado se faz a soma dos valores.
- */
- $permissions = [
- [
- "scope" => "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.provider_client_block",
- "description" => "Clientes Bloqueados do Prestador",
- "bits" => 271,
- "children" => [],
- ],
- [
- "scope" => "config.client_provider_block",
- "description" => "Prestadores Bloqueados 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" => [],
- ],
- [
- "scope" => "config.review",
- "description" => "Avaliações",
- "bits" => 271,
- "children" => [],
- ],
- [
- "scope" => "config.review_improvement",
- "description" => "Melhorias das Avaliações",
- "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,
- );
- }
- }
- }
- }
|