PermissionSeeder.php 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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' => 'config',
  29. 'description' => 'Configurações',
  30. 'bits' => 271,
  31. 'children' => [
  32. [
  33. 'scope' => 'config.address',
  34. 'description' => 'Configurações de Endereços',
  35. 'bits' => 271,
  36. 'children' => [],
  37. ],
  38. [
  39. 'scope' => 'config.city',
  40. 'description' => 'Configurações de Cidades',
  41. 'bits' => 271,
  42. 'children' => [],
  43. ],
  44. [
  45. 'scope' => 'config.client',
  46. 'description' => 'Configurações de Clientes',
  47. 'bits' => 271,
  48. 'children' => [],
  49. ],
  50. [
  51. 'scope' => 'config.client_favorite_provider',
  52. 'description' => 'Configurações de Prestadores Favoritos do Cliente',
  53. 'bits' => 271,
  54. 'children' => [],
  55. ],
  56. [
  57. 'scope' => 'config.client_payment_method',
  58. 'description' => 'Configurações de Métodos de Pagamento do Cliente',
  59. 'bits' => 271,
  60. 'children' => [],
  61. ],
  62. [
  63. 'scope' => 'config.client_provider_block',
  64. 'description' => 'Prestadores Bloqueados do Cliente',
  65. 'bits' => 271,
  66. 'children' => [],
  67. ],
  68. [
  69. 'scope' => 'config.country',
  70. 'description' => 'Configurações de Países',
  71. 'bits' => 271,
  72. 'children' => [],
  73. ],
  74. [
  75. 'scope' => 'config.custom_schedule',
  76. 'description' => 'Oportunidades (Agendamentos Personalizados)',
  77. 'bits' => 271,
  78. 'children' => [],
  79. ],
  80. [
  81. 'scope' => 'config.improvement_type',
  82. 'description' => 'Configurações de Tipos de Melhoria',
  83. 'bits' => 271,
  84. 'children' => [],
  85. ],
  86. [
  87. 'scope' => 'config.media',
  88. 'description' => 'Configurações de Mídia',
  89. 'bits' => 271,
  90. 'children' => [],
  91. ],
  92. [
  93. 'scope' => 'config.permission',
  94. 'description' => 'Configurações de Permissões',
  95. 'bits' => 271,
  96. 'children' => [],
  97. ],
  98. [
  99. 'scope' => 'config.provider',
  100. 'description' => 'Configurações de Prestadores',
  101. 'bits' => 271,
  102. 'children' => [],
  103. ],
  104. [
  105. 'scope' => 'config.provider_blocked_day',
  106. 'description' => 'Configurações de Dias Bloqueados do Prestador',
  107. 'bits' => 271,
  108. 'children' => [],
  109. ],
  110. [
  111. 'scope' => 'config.provider_client_block',
  112. 'description' => 'Clientes Bloqueados do Prestador',
  113. 'bits' => 271,
  114. 'children' => [],
  115. ],
  116. [
  117. 'scope' => 'config.provider_services_types',
  118. 'description' => 'Configurações de Tipos de Serviços do Prestador',
  119. 'bits' => 271,
  120. 'children' => [],
  121. ],
  122. [
  123. 'scope' => 'config.provider_speciality',
  124. 'description' => 'Configurações de Especialidades do Prestador',
  125. 'bits' => 271,
  126. 'children' => [],
  127. ],
  128. [
  129. 'scope' => 'config.provider_working_day',
  130. 'description' => 'Configurações de Dias de Trabalho do Prestador',
  131. 'bits' => 271,
  132. 'children' => [],
  133. ],
  134. [
  135. 'scope' => 'config.review',
  136. 'description' => 'Avaliações',
  137. 'bits' => 271,
  138. 'children' => [],
  139. ],
  140. [
  141. 'scope' => 'config.review_improvement',
  142. 'description' => 'Melhorias das Avaliações',
  143. 'bits' => 271,
  144. 'children' => [],
  145. ],
  146. [
  147. 'scope' => 'config.schedule',
  148. 'description' => 'Agendamentos',
  149. 'bits' => 271,
  150. 'children' => [],
  151. ],
  152. [
  153. 'scope' => 'config.schedule_proposal',
  154. 'description' => 'Propostas de Agendamento',
  155. 'bits' => 271,
  156. 'children' => [],
  157. ],
  158. [
  159. 'scope' => 'config.schedule_refuse',
  160. 'description' => 'Recusas de Agendamento',
  161. 'bits' => 271,
  162. 'children' => [],
  163. ],
  164. [
  165. 'scope' => 'config.service_type',
  166. 'description' => 'Configurações de Tipos de Serviço',
  167. 'bits' => 271,
  168. 'children' => [],
  169. ],
  170. [
  171. 'scope' => 'config.speciality',
  172. 'description' => 'Configurações de Especialidades',
  173. 'bits' => 271,
  174. 'children' => [],
  175. ],
  176. [
  177. 'scope' => 'config.state',
  178. 'description' => 'Configurações de Estados',
  179. 'bits' => 271,
  180. 'children' => [],
  181. ],
  182. [
  183. 'scope' => 'config.user',
  184. 'description' => 'Configurações de Usuários',
  185. 'bits' => 271,
  186. 'children' => [],
  187. ],
  188. [
  189. 'scope' => 'notification',
  190. 'description' => 'Notificações',
  191. 'bits' => 271,
  192. 'children' => [],
  193. ],
  194. ],
  195. ],
  196. [
  197. 'scope' => 'dashboard',
  198. 'description' => 'Dashboard',
  199. 'bits' => 511,
  200. 'children' => [],
  201. ],
  202. [
  203. 'scope' => 'payment',
  204. 'description' => 'Pagamentos',
  205. 'bits' => 257,
  206. 'children' => [
  207. [
  208. 'scope' => 'payment-split',
  209. 'description' => 'Splits de Pagamento',
  210. 'bits' => 1,
  211. 'children' => [],
  212. ],
  213. ],
  214. ],
  215. ];
  216. $this->createPermissionsAndChildren(permissions: $permissions);
  217. }
  218. /**
  219. * Recursively creates or updates permissions and handles nesting.
  220. *
  221. * @param array $permissions The array of permission data.
  222. * @param Permission|null $parent The parent Permission object (for nested sets).
  223. */
  224. private function createPermissionsAndChildren(
  225. array $permissions,
  226. ?Permission $parent = null,
  227. ): void {
  228. foreach ($permissions as $permissionData) {
  229. $children = $permissionData['children'];
  230. unset($permissionData['children']);
  231. $permissionNode = Permission::updateOrCreate(
  232. ['scope' => $permissionData['scope']],
  233. $permissionData,
  234. );
  235. if ($parent) {
  236. $parent->appendNode($permissionNode);
  237. }
  238. if (! empty($children)) {
  239. $this->createPermissionsAndChildren(
  240. permissions: $children,
  241. parent: $permissionNode,
  242. );
  243. }
  244. }
  245. }
  246. }