PermissionSeeder.php 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  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. // 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_payment_method",
  148. "description" => "Configurações de Métodos de Pagamento do Prestador",
  149. "bits" => 271,
  150. "children" => [],
  151. ],
  152. [
  153. "scope" => "config.provider_working_day",
  154. "description" => "Configurações de Dias de Trabalho do Prestador",
  155. "bits" => 271,
  156. "children" => [],
  157. ],
  158. [
  159. "scope" => "config.provider_blocked_day",
  160. "description" => "Configurações de Dias Bloqueados do Prestador",
  161. "bits" => 271,
  162. "children" => [],
  163. ],
  164. [
  165. "scope" => "config.improvement_type",
  166. "description" => "Configurações de Tipos de Melhoria",
  167. "bits" => 271,
  168. "children" => [],
  169. ],
  170. [
  171. "scope" => "config.media",
  172. "description" => "Configurações de Mídia",
  173. "bits" => 271,
  174. "children" => [],
  175. ],
  176. [
  177. "scope" => "config.service_type",
  178. "description" => "Configurações de Tipos de Serviço",
  179. "bits" => 271,
  180. "children" => [],
  181. ],
  182. [
  183. "scope" => "config.speciality",
  184. "description" => "Configurações de Especialidades",
  185. "bits" => 271,
  186. "children" => [],
  187. ],
  188. [
  189. "scope" => "config.review",
  190. "description" => "Avaliações",
  191. "bits" => 271,
  192. "children" => [],
  193. ],
  194. [
  195. "scope" => "config.review_improvement",
  196. "description" => "Melhorias das Avaliaçõ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. }