PermissionSeeder.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. <?php
  2. namespace Database\Seeders;
  3. use App\Models\Permission;
  4. use App\Services\PermissionService;
  5. use Illuminate\Database\Seeder;
  6. class PermissionSeeder extends Seeder
  7. {
  8. public function __construct(
  9. protected PermissionService $permissionService,
  10. ) {}
  11. public function run(): void
  12. {
  13. // Criação de Permissões
  14. /*
  15. view = 1
  16. add = 2
  17. edit = 4
  18. delete = 8
  19. print = 16
  20. export = 32
  21. import = 64
  22. limit = 128
  23. menu = 256
  24. para cada cada bit selecionado se faz a soma dos valores.
  25. */
  26. $permissions = [
  27. [
  28. 'scope' => 'dashboard',
  29. 'description' => 'Dashboard',
  30. 'bits' => 511,
  31. 'children' => [],
  32. ],
  33. [
  34. 'scope' => 'config',
  35. 'description' => 'Configurações',
  36. 'bits' => 271,
  37. 'children' => [
  38. [
  39. 'scope' => 'config.user',
  40. 'description' => 'Configurações de Usuários',
  41. 'bits' => 271,
  42. 'children' => [],
  43. ],
  44. [
  45. 'scope' => 'config.permission',
  46. 'description' => 'Configurações de Permissões',
  47. 'bits' => 271,
  48. 'children' => [],
  49. ],
  50. [
  51. 'scope' => 'config.address',
  52. 'description' => 'Configurações de Endereços',
  53. 'bits' => 271,
  54. 'children' => [],
  55. ],
  56. [
  57. 'scope' => 'config.city',
  58. 'description' => 'Configurações de Cidades',
  59. 'bits' => 271,
  60. 'children' => [],
  61. ],
  62. [
  63. 'scope' => 'config.client',
  64. 'description' => 'Configurações de Clientes',
  65. 'bits' => 271,
  66. 'children' => [],
  67. ],
  68. [
  69. 'scope' => 'config.client_favorite_provider',
  70. 'description' => 'Configurações de Prestadores Favoritos do Cliente',
  71. 'bits' => 271,
  72. 'children' => [],
  73. ],
  74. [
  75. 'scope' => 'config.provider_client_block',
  76. 'description' => 'Clientes Bloqueados do Prestador',
  77. 'bits' => 271,
  78. 'children' => [],
  79. ],
  80. [
  81. 'scope' => 'config.client_provider_block',
  82. 'description' => 'Prestadores Bloqueados do Cliente',
  83. 'bits' => 271,
  84. 'children' => [],
  85. ],
  86. [
  87. 'scope' => 'config.client_payment_method',
  88. 'description' => 'Configurações de Métodos de Pagamento do Cliente',
  89. 'bits' => 271,
  90. 'children' => [],
  91. ],
  92. [
  93. 'scope' => 'config.schedule',
  94. 'description' => 'Agendamentos',
  95. 'bits' => 271,
  96. 'children' => [],
  97. ],
  98. [
  99. 'scope' => 'config.custom_schedule',
  100. 'description' => 'Oportunidades (Agendamentos Personalizados)',
  101. 'bits' => 271,
  102. 'children' => [],
  103. ],
  104. [
  105. 'scope' => 'config.schedule_proposal',
  106. 'description' => 'Propostas de Agendamento',
  107. 'bits' => 271,
  108. 'children' => [],
  109. ],
  110. [
  111. 'scope' => 'config.schedule_refuse',
  112. 'description' => 'Recusas de Agendamento',
  113. 'bits' => 271,
  114. 'children' => [],
  115. ],
  116. [
  117. 'scope' => 'config.country',
  118. 'description' => 'Configurações de Países',
  119. 'bits' => 271,
  120. 'children' => [],
  121. ],
  122. [
  123. 'scope' => 'config.state',
  124. 'description' => 'Configurações de Estados',
  125. 'bits' => 271,
  126. 'children' => [],
  127. ],
  128. [
  129. 'scope' => 'config.provider',
  130. 'description' => 'Configurações de Prestadores',
  131. 'bits' => 271,
  132. 'children' => [],
  133. ],
  134. [
  135. 'scope' => 'config.provider_speciality',
  136. 'description' => 'Configurações de Especialidades do Prestador',
  137. 'bits' => 271,
  138. 'children' => [],
  139. ],
  140. [
  141. 'scope' => 'config.provider_services_types',
  142. 'description' => 'Configurações de Tipos de Serviços do Prestador',
  143. 'bits' => 271,
  144. 'children' => [],
  145. ],
  146. [
  147. 'scope' => 'config.provider_working_day',
  148. 'description' => 'Configurações de Dias de Trabalho do Prestador',
  149. 'bits' => 271,
  150. 'children' => [],
  151. ],
  152. [
  153. 'scope' => 'config.provider_blocked_day',
  154. 'description' => 'Configurações de Dias Bloqueados do Prestador',
  155. 'bits' => 271,
  156. 'children' => [],
  157. ],
  158. [
  159. 'scope' => 'config.improvement_type',
  160. 'description' => 'Configurações de Tipos de Melhoria',
  161. 'bits' => 271,
  162. 'children' => [],
  163. ],
  164. [
  165. 'scope' => 'config.media',
  166. 'description' => 'Configurações de Mídia',
  167. 'bits' => 271,
  168. 'children' => [],
  169. ],
  170. [
  171. 'scope' => 'config.service_type',
  172. 'description' => 'Configurações de Tipos de Serviço',
  173. 'bits' => 271,
  174. 'children' => [],
  175. ],
  176. [
  177. 'scope' => 'config.speciality',
  178. 'description' => 'Configurações de Especialidades',
  179. 'bits' => 271,
  180. 'children' => [],
  181. ],
  182. [
  183. 'scope' => 'config.review',
  184. 'description' => 'Avaliações',
  185. 'bits' => 271,
  186. 'children' => [],
  187. ],
  188. [
  189. 'scope' => 'config.review_improvement',
  190. 'description' => 'Melhorias das Avaliações',
  191. 'bits' => 271,
  192. 'children' => [],
  193. ],
  194. [
  195. 'scope' => 'notification',
  196. 'description' => 'Notificações',
  197. 'bits' => 271,
  198. 'children' => [],
  199. ],
  200. ],
  201. ],
  202. ];
  203. $this->createPermissionsAndChildren(permissions: $permissions);
  204. }
  205. /**
  206. * Recursively creates or updates permissions and handles nesting.
  207. *
  208. * @param array $permissions The array of permission data.
  209. * @param Permission|null $parent The parent Permission object (for nested sets).
  210. */
  211. private function createPermissionsAndChildren(
  212. array $permissions,
  213. ?Permission $parent = null,
  214. ): void {
  215. foreach ($permissions as $permissionData) {
  216. $children = $permissionData['children'];
  217. unset($permissionData['children']);
  218. $permissionNode = Permission::updateOrCreate(
  219. ['scope' => $permissionData['scope']],
  220. $permissionData,
  221. );
  222. if ($parent) {
  223. $parent->appendNode($permissionNode);
  224. }
  225. if (! empty($children)) {
  226. $this->createPermissionsAndChildren(
  227. permissions: $children,
  228. parent: $permissionNode,
  229. );
  230. }
  231. }
  232. }
  233. }