2020_07_11_151834_create_user_role_table.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. use Illuminate\Support\Facades\Schema;
  3. use Illuminate\Database\Schema\Blueprint;
  4. use Illuminate\Database\Migrations\Migration;
  5. use Itstructure\LaRbac\Helpers\Helper;
  6. /**
  7. * Class CreateUserRoleTable
  8. *
  9. * @author Andrey Girnik <girnikandrey@gmail.com>
  10. */
  11. class CreateUserRoleTable extends Migration
  12. {
  13. /**
  14. * @var string
  15. */
  16. protected $userModelClass;
  17. /**
  18. * UserController constructor.
  19. */
  20. public function __construct()
  21. {
  22. $this->userModelClass = config('rbac.userModelClass');
  23. }
  24. /**
  25. * Run the migrations.
  26. * @throws Exception
  27. * @throws \Exception
  28. */
  29. public function up()
  30. {
  31. Helper::checkUserModel($this->userModelClass);
  32. /* @var Illuminate\Foundation\Auth\User $userNewModel */
  33. $userNewModel = new $this->userModelClass();
  34. Helper::checkUserModelKeyType($userNewModel);
  35. $userModelTable = $userNewModel->getTable();
  36. $userModelKeyName = $userNewModel->getAuthIdentifierName();
  37. $userTablePrimaryType = Schema::getConnection()->getDoctrineColumn($userModelTable, $userModelKeyName)->getType()->getName();
  38. Helper::checkUserTablePrimaryType($userTablePrimaryType, $userModelKeyName, $userModelTable);
  39. Schema::create('user_role', function (Blueprint $table) use ($userModelKeyName, $userModelTable, $userTablePrimaryType) {
  40. switch ($userTablePrimaryType) {
  41. case 'bigint':
  42. $table->unsignedBigInteger('user_id');
  43. break;
  44. case 'integer':
  45. $table->unsignedInteger('user_id');
  46. break;
  47. }
  48. $table->unsignedInteger('role_id');
  49. $table->timestamps();
  50. $table->unique(['user_id','role_id']);
  51. $table->foreign('user_id')->references($userModelKeyName)->on($userModelTable)->onDelete('cascade');
  52. $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
  53. });
  54. }
  55. /**
  56. * Reverse the migrations.
  57. * @return void
  58. */
  59. public function down()
  60. {
  61. Schema::dropIfExists('user_role');
  62. }
  63. }