2019_04_01_091810_create_permission_tables.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?php
  2. use Illuminate\Support\Facades\Schema;
  3. use Illuminate\Database\Schema\Blueprint;
  4. use Illuminate\Database\Migrations\Migration;
  5. class CreatePermissionTables extends Migration
  6. {
  7. /**
  8. * Run the migrations.
  9. *
  10. * @return void
  11. */
  12. public function up()
  13. {
  14. $tableNames = config('permission.table_names');
  15. $columnNames = config('permission.column_names');
  16. Schema::create($tableNames['permissions'], function (Blueprint $table) {
  17. $table->increments('id');
  18. $table->string('name');
  19. $table->string('guard_name');
  20. $table->timestamps();
  21. });
  22. Schema::create($tableNames['roles'], function (Blueprint $table) {
  23. $table->increments('id');
  24. $table->string('name');
  25. $table->string('guard_name');
  26. $table->timestamps();
  27. });
  28. Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames) {
  29. $table->unsignedInteger('permission_id');
  30. $table->string('model_type');
  31. $table->unsignedBigInteger($columnNames['model_morph_key']);
  32. $table->index([$columnNames['model_morph_key'], 'model_type', ]);
  33. $table->foreign('permission_id')
  34. ->references('id')
  35. ->on($tableNames['permissions'])
  36. ->onDelete('cascade');
  37. $table->primary(['permission_id', $columnNames['model_morph_key'], 'model_type'],
  38. 'model_has_permissions_permission_model_type_primary');
  39. });
  40. Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames) {
  41. $table->unsignedInteger('role_id');
  42. $table->string('model_type');
  43. $table->unsignedBigInteger($columnNames['model_morph_key']);
  44. $table->index([$columnNames['model_morph_key'], 'model_type', ]);
  45. $table->foreign('role_id')
  46. ->references('id')
  47. ->on($tableNames['roles'])
  48. ->onDelete('cascade');
  49. $table->primary(['role_id', $columnNames['model_morph_key'], 'model_type'],
  50. 'model_has_roles_role_model_type_primary');
  51. });
  52. Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames) {
  53. $table->unsignedInteger('permission_id');
  54. $table->unsignedInteger('role_id');
  55. $table->foreign('permission_id')
  56. ->references('id')
  57. ->on($tableNames['permissions'])
  58. ->onDelete('cascade');
  59. $table->foreign('role_id')
  60. ->references('id')
  61. ->on($tableNames['roles'])
  62. ->onDelete('cascade');
  63. $table->primary(['permission_id', 'role_id']);
  64. });
  65. app('cache')
  66. ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null)
  67. ->forget(config('permission.cache.key'));
  68. }
  69. /**
  70. * Reverse the migrations.
  71. *
  72. * @return void
  73. */
  74. public function down()
  75. {
  76. $tableNames = config('permission.table_names');
  77. Schema::drop($tableNames['role_has_permissions']);
  78. Schema::drop($tableNames['model_has_roles']);
  79. Schema::drop($tableNames['model_has_permissions']);
  80. Schema::drop($tableNames['roles']);
  81. Schema::drop($tableNames['permissions']);
  82. }
  83. }