PermissionSeeder.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268
  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. "scope" => "parceiro.avaliacao",
  112. "description" => "Avaliação do Parceiro",
  113. "bits" => Permission::VIEW | Permission::ADD,
  114. "children" => [],
  115. ]
  116. ],
  117. ],
  118. [
  119. "scope" => "loja",
  120. "description" => "Loja",
  121. "bits" => Permission::MENU | Permission::VIEW,
  122. "children" => [
  123. [
  124. "scope" => "loja.item",
  125. "description" => "Itens da Loja",
  126. "bits" => Permission::CRUD,
  127. "children" => [],
  128. ],
  129. [
  130. "scope" => "loja.pedido",
  131. "description" => "Pedidos da Loja",
  132. "bits" => Permission::CRUD,
  133. "children" => [],
  134. ],
  135. ],
  136. ],
  137. [
  138. "scope" => "agendamento",
  139. "description" => "Agendamentos",
  140. "bits" => Permission::ALL_PERMS,
  141. "children" => [],
  142. ],
  143. [
  144. "scope" => "notificacao",
  145. "description" => "Notificações",
  146. "bits" => Permission::ALL_PERMS,
  147. "children" => [],
  148. ],
  149. [
  150. "scope" => "avaliacao",
  151. "description" => "Campanhas de Avaliação",
  152. "bits" => Permission::ALL_PERMS,
  153. "children" => [],
  154. ],
  155. [
  156. "scope" => "associado",
  157. "description" => "Associado",
  158. "bits" => Permission::MENU | Permission::VIEW,
  159. "children" => [
  160. [
  161. "scope" => "associado.perfil",
  162. "description" => "Meu Perfil do Associado",
  163. "bits" => Permission::VIEW | Permission::EDIT,
  164. "children" => [],
  165. ],
  166. [
  167. "scope" => "associado.carteirinha",
  168. "description" => "Carteirinha do Associado",
  169. "bits" => Permission::VIEW,
  170. "children" => [],
  171. ],
  172. [
  173. "scope" => "associado.convenio",
  174. "description" => "Convênios do Associado",
  175. "bits" => Permission::VIEW,
  176. "children" => [],
  177. ],
  178. [
  179. "scope" => "associado.dependente",
  180. "description" => "Dependentes do Associado",
  181. "bits" => Permission::CRUD,
  182. "children" => [],
  183. ],
  184. [
  185. "scope" => "associado.dependente_aprovacao",
  186. "description" => "Aprovação de Dependentes (Admin)",
  187. "bits" => Permission::VIEW | Permission::EDIT,
  188. "children" => [],
  189. ],
  190. [
  191. "scope" => "associado.loja",
  192. "description" => "Loja do Associado",
  193. "bits" => Permission::VIEW,
  194. "children" => [],
  195. ],
  196. [
  197. "scope" => "associado.agendamento",
  198. "description" => "Agendamento do Associado",
  199. "bits" => Permission::VIEW | Permission::ADD | Permission::EDIT,
  200. "children" => [],
  201. ],
  202. [
  203. "scope" => "associado.notificacao",
  204. "description" => "Notificações do Associado",
  205. "bits" => Permission::VIEW,
  206. "children" => [],
  207. ],
  208. [
  209. "scope" => "associado.avaliacao",
  210. "description" => "Avaliação do Associado",
  211. "bits" => Permission::VIEW | Permission::ADD,
  212. "children" => [],
  213. ]
  214. ],
  215. ],
  216. [
  217. "scope" => "categoria",
  218. "description" => "Categorias",
  219. "bits" => Permission::CRUD,
  220. "children" => [],
  221. ],
  222. [
  223. "scope" => "relatorio",
  224. "description" => "Relatórios",
  225. "bits" => Permission::MENU | Permission::VIEW,
  226. "children" => [],
  227. ],
  228. [
  229. "scope" => "configuracoes-empresa",
  230. "description" => "Configurações da Empresa",
  231. "bits" => Permission::CRUD,
  232. "children" => [],
  233. ],
  234. ];
  235. $this->createPermissionsAndChildren(permissions: $permissions);
  236. }
  237. private function createPermissionsAndChildren(
  238. array $permissions,
  239. ?Permission $parent = null,
  240. ): void {
  241. foreach ($permissions as $permissionData) {
  242. $children = $permissionData["children"];
  243. unset($permissionData["children"]);
  244. $permissionNode = Permission::updateOrCreate(
  245. ["scope" => $permissionData["scope"]],
  246. $permissionData,
  247. );
  248. if ($parent) {
  249. $parent->appendNode($permissionNode);
  250. }
  251. if (!empty($children)) {
  252. $this->createPermissionsAndChildren(
  253. permissions: $children,
  254. parent: $permissionNode,
  255. );
  256. }
  257. }
  258. }
  259. }