PermissionSeeder.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. namespace Database\Seeders;
  3. use App\Models\Permission;
  4. use Illuminate\Database\Seeder;
  5. use App\Services\PermissionService;
  6. class PermissionSeeder extends Seeder
  7. {
  8. public function __construct(
  9. protected PermissionService $permissionService,
  10. ) {}
  11. public function run(): void
  12. {
  13. $permissions = [
  14. [
  15. "scope" => "dashboard",
  16. "description" => "Dashboard",
  17. "bits" => Permission::ALL_PERMS,
  18. "children" => [],
  19. ],
  20. [
  21. "scope" => "config",
  22. "description" => "Configurações",
  23. "bits" => Permission::MENU | Permission::VIEW,
  24. "children" => [
  25. [
  26. "scope" => "config.user",
  27. "description" => "Configurações de Usuários",
  28. "bits" => Permission::CRUD,
  29. "children" => [],
  30. ],
  31. [
  32. "scope" => "config.permission",
  33. "description" => "Configurações de Permissões",
  34. "bits" => Permission::CRUD,
  35. "children" => [],
  36. ],
  37. [
  38. "scope" => "config.city",
  39. "description" => "Configurações de Cidades",
  40. "bits" => Permission::CRUD,
  41. "children" => [],
  42. ],
  43. [
  44. "scope" => "config.country",
  45. "description" => "Configurações de Países",
  46. "bits" => Permission::CRUD,
  47. "children" => [],
  48. ],
  49. [
  50. "scope" => "config.state",
  51. "description" => "Configurações de Estados",
  52. "bits" => Permission::CRUD,
  53. "children" => [],
  54. ],
  55. ],
  56. ],
  57. [
  58. "scope" => "parceiro",
  59. "description" => "Parceiros e Convênios",
  60. "bits" => Permission::MENU | Permission::VIEW,
  61. "children" => [
  62. [
  63. "scope" => "parceiro.convenio",
  64. "description" => "Gestão de Parceiros/Convênios",
  65. "bits" => Permission::CRUD,
  66. "children" => [],
  67. ],
  68. [
  69. "scope" => "parceiro.servico",
  70. "description" => "Serviços dos Parceiros",
  71. "bits" => Permission::CRUD,
  72. "children" => [],
  73. ],
  74. ],
  75. ],
  76. [
  77. "scope" => "loja",
  78. "description" => "Loja",
  79. "bits" => Permission::MENU | Permission::VIEW,
  80. "children" => [
  81. [
  82. "scope" => "loja.item",
  83. "description" => "Itens da Loja",
  84. "bits" => Permission::CRUD,
  85. "children" => [],
  86. ],
  87. [
  88. "scope" => "loja.pedido",
  89. "description" => "Pedidos da Loja",
  90. "bits" => Permission::CRUD,
  91. "children" => [],
  92. ],
  93. ],
  94. ],
  95. [
  96. "scope" => "agendamento",
  97. "description" => "Agendamentos",
  98. "bits" => Permission::ALL_PERMS,
  99. "children" => [],
  100. ],
  101. [
  102. "scope" => "notificacao",
  103. "description" => "Notificações",
  104. "bits" => Permission::ALL_PERMS,
  105. "children" => [],
  106. ],
  107. [
  108. "scope" => "categoria",
  109. "description" => "Categorias",
  110. "bits" => Permission::CRUD,
  111. "children" => [],
  112. ],
  113. ];
  114. $this->createPermissionsAndChildren(permissions: $permissions);
  115. }
  116. private function createPermissionsAndChildren(
  117. array $permissions,
  118. ?Permission $parent = null,
  119. ): void {
  120. foreach ($permissions as $permissionData) {
  121. $children = $permissionData["children"];
  122. unset($permissionData["children"]);
  123. $permissionNode = Permission::updateOrCreate(
  124. ["scope" => $permissionData["scope"]],
  125. $permissionData,
  126. );
  127. if ($parent) {
  128. $parent->appendNode($permissionNode);
  129. }
  130. if (!empty($children)) {
  131. $this->createPermissionsAndChildren(
  132. permissions: $children,
  133. parent: $permissionNode,
  134. );
  135. }
  136. }
  137. }
  138. }