PermissionSeeder.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. "scope" => "config.position",
  57. "description" => "Configurações de Cargos",
  58. "bits" => Permission::CRUD,
  59. "children" => [],
  60. ],
  61. [
  62. "scope" => "config.sector",
  63. "description" => "Configurações de Setores",
  64. "bits" => Permission::CRUD,
  65. "children" => [],
  66. ],
  67. ],
  68. ],
  69. [
  70. "scope" => "parceiro",
  71. "description" => "Parceiros e Convênios",
  72. "bits" => Permission::MENU | Permission::VIEW,
  73. "children" => [
  74. [
  75. "scope" => "parceiro.convenio",
  76. "description" => "Gestão de Parceiros/Convênios",
  77. "bits" => Permission::CRUD,
  78. "children" => [],
  79. ],
  80. [
  81. "scope" => "parceiro.servico",
  82. "description" => "Serviços dos Parceiros",
  83. "bits" => Permission::CRUD,
  84. "children" => [],
  85. ],
  86. [
  87. "scope" => "parceiro.carteirinha",
  88. "description" => "Gestão de Carteirinhas",
  89. "bits" => Permission::CRUD,
  90. "children" => [],
  91. ],
  92. [
  93. "scope" => "parceiro.agendamento",
  94. "description" => "Agendamento de Serviços",
  95. "bits" => Permission::CRUD,
  96. "children" => [],
  97. ],
  98. [
  99. "scope" => "parceiro.dados",
  100. "description" => "Dados dos Parceiros",
  101. "bits" => Permission::CRUD,
  102. "children" => [],
  103. ],
  104. [
  105. "scope" => "parceiro.notificacao",
  106. "description" => "Notificações dos Parceiros",
  107. "bits" => Permission::CRUD,
  108. "children" => [],
  109. ]
  110. ],
  111. ],
  112. [
  113. "scope" => "loja",
  114. "description" => "Loja",
  115. "bits" => Permission::MENU | Permission::VIEW,
  116. "children" => [
  117. [
  118. "scope" => "loja.item",
  119. "description" => "Itens da Loja",
  120. "bits" => Permission::CRUD,
  121. "children" => [],
  122. ],
  123. [
  124. "scope" => "loja.pedido",
  125. "description" => "Pedidos da Loja",
  126. "bits" => Permission::CRUD,
  127. "children" => [],
  128. ],
  129. ],
  130. ],
  131. [
  132. "scope" => "agendamento",
  133. "description" => "Agendamentos",
  134. "bits" => Permission::ALL_PERMS,
  135. "children" => [],
  136. ],
  137. [
  138. "scope" => "notificacao",
  139. "description" => "Notificações",
  140. "bits" => Permission::ALL_PERMS,
  141. "children" => [],
  142. ],
  143. [
  144. "scope" => "associado",
  145. "description" => "Associado",
  146. "bits" => Permission::MENU | Permission::VIEW,
  147. "children" => [
  148. [
  149. "scope" => "associado.perfil",
  150. "description" => "Meu Perfil do Associado",
  151. "bits" => Permission::VIEW | Permission::EDIT,
  152. "children" => [],
  153. ],
  154. [
  155. "scope" => "associado.carteirinha",
  156. "description" => "Carteirinha do Associado",
  157. "bits" => Permission::VIEW,
  158. "children" => [],
  159. ],
  160. [
  161. "scope" => "associado.convenio",
  162. "description" => "Convênios do Associado",
  163. "bits" => Permission::VIEW,
  164. "children" => [],
  165. ],
  166. [
  167. "scope" => "associado.dependente",
  168. "description" => "Dependentes do Associado",
  169. "bits" => Permission::CRUD,
  170. "children" => [],
  171. ],
  172. ],
  173. ],
  174. [
  175. "scope" => "categoria",
  176. "description" => "Categorias",
  177. "bits" => Permission::CRUD,
  178. "children" => [],
  179. ],
  180. ];
  181. $this->createPermissionsAndChildren(permissions: $permissions);
  182. }
  183. private function createPermissionsAndChildren(
  184. array $permissions,
  185. ?Permission $parent = null,
  186. ): void {
  187. foreach ($permissions as $permissionData) {
  188. $children = $permissionData["children"];
  189. unset($permissionData["children"]);
  190. $permissionNode = Permission::updateOrCreate(
  191. ["scope" => $permissionData["scope"]],
  192. $permissionData,
  193. );
  194. if ($parent) {
  195. $parent->appendNode($permissionNode);
  196. }
  197. if (!empty($children)) {
  198. $this->createPermissionsAndChildren(
  199. permissions: $children,
  200. parent: $permissionNode,
  201. );
  202. }
  203. }
  204. }
  205. }