PermissionSeeder.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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.city",
  52. "description" => "Configurações de Cidades",
  53. "bits" => 271,
  54. "children" => [],
  55. ],
  56. [
  57. "scope" => "config.country",
  58. "description" => "Configurações de Países",
  59. "bits" => 271,
  60. "children" => [],
  61. ],
  62. [
  63. "scope" => "config.state",
  64. "description" => "Configurações de Estados",
  65. "bits" => 271,
  66. "children" => [],
  67. ],
  68. [
  69. "scope" => "config.provider",
  70. "description" => "Configurações de Prestadores",
  71. "bits" => 271,
  72. "children" => [],
  73. ],
  74. [
  75. "scope" => "config.media",
  76. "description" => "Configurações de Mídia",
  77. "bits" => 271,
  78. "children" => [],
  79. ],
  80. ],
  81. ],
  82. ];
  83. $this->createPermissionsAndChildren(permissions: $permissions);
  84. }
  85. /**
  86. * Recursively creates or updates permissions and handles nesting.
  87. *
  88. * @param array $permissions The array of permission data.
  89. * @param Permission|null $parent The parent Permission object (for nested sets).
  90. */
  91. private function createPermissionsAndChildren(
  92. array $permissions,
  93. ?Permission $parent = null,
  94. ): void {
  95. foreach ($permissions as $permissionData) {
  96. $children = $permissionData["children"];
  97. unset($permissionData["children"]);
  98. $permissionNode = Permission::updateOrCreate(
  99. ["scope" => $permissionData["scope"]],
  100. $permissionData,
  101. );
  102. if ($parent) {
  103. $parent->appendNode($permissionNode);
  104. }
  105. if (!empty($children)) {
  106. $this->createPermissionsAndChildren(
  107. permissions: $children,
  108. parent: $permissionNode,
  109. );
  110. }
  111. }
  112. }
  113. }