2020-06-26 23:32:33 +00:00
< ? php
2020-10-10 16:30:26 +00:00
/*
* Copyright © 2020 Miguel Nogueira
*
* This file is part of Raspberry Staff Manager .
*
* Raspberry Staff Manager is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
*
* Raspberry Staff Manager is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with Raspberry Staff Manager . If not , see < https :// www . gnu . org / licenses />.
*/
2020-06-26 23:32:33 +00:00
use Illuminate\Database\Migrations\Migration ;
2020-10-10 16:30:26 +00:00
use Illuminate\Database\Schema\Blueprint ;
use Illuminate\Support\Facades\Schema ;
2020-06-26 23:32:33 +00:00
class CreatePermissionTables extends Migration
{
/**
* Run the migrations .
*
* @ return void
*/
public function up ()
{
$tableNames = config ( 'permission.table_names' );
$columnNames = config ( 'permission.column_names' );
if ( empty ( $tableNames )) {
throw new \Exception ( 'Error: config/permission.php not loaded. Run [php artisan config:clear] and try again.' );
}
Schema :: create ( $tableNames [ 'permissions' ], function ( Blueprint $table ) {
$table -> bigIncrements ( 'id' );
$table -> string ( 'name' );
$table -> string ( 'guard_name' );
$table -> timestamps ();
});
Schema :: create ( $tableNames [ 'roles' ], function ( Blueprint $table ) {
$table -> bigIncrements ( 'id' );
$table -> string ( 'name' );
$table -> string ( 'guard_name' );
$table -> timestamps ();
});
Schema :: create ( $tableNames [ 'model_has_permissions' ], function ( Blueprint $table ) use ( $tableNames , $columnNames ) {
$table -> unsignedBigInteger ( 'permission_id' );
$table -> string ( 'model_type' );
$table -> unsignedBigInteger ( $columnNames [ 'model_morph_key' ]);
$table -> index ([ $columnNames [ 'model_morph_key' ], 'model_type' ], 'model_has_permissions_model_id_model_type_index' );
$table -> foreign ( 'permission_id' )
-> references ( 'id' )
-> on ( $tableNames [ 'permissions' ])
-> onDelete ( 'cascade' );
$table -> primary ([ 'permission_id' , $columnNames [ 'model_morph_key' ], 'model_type' ],
'model_has_permissions_permission_model_type_primary' );
});
Schema :: create ( $tableNames [ 'model_has_roles' ], function ( Blueprint $table ) use ( $tableNames , $columnNames ) {
$table -> unsignedBigInteger ( 'role_id' );
$table -> string ( 'model_type' );
$table -> unsignedBigInteger ( $columnNames [ 'model_morph_key' ]);
$table -> index ([ $columnNames [ 'model_morph_key' ], 'model_type' ], 'model_has_roles_model_id_model_type_index' );
$table -> foreign ( 'role_id' )
-> references ( 'id' )
-> on ( $tableNames [ 'roles' ])
-> onDelete ( 'cascade' );
$table -> primary ([ 'role_id' , $columnNames [ 'model_morph_key' ], 'model_type' ],
'model_has_roles_role_model_type_primary' );
});
Schema :: create ( $tableNames [ 'role_has_permissions' ], function ( Blueprint $table ) use ( $tableNames ) {
$table -> unsignedBigInteger ( 'permission_id' );
$table -> unsignedBigInteger ( 'role_id' );
$table -> foreign ( 'permission_id' )
-> references ( 'id' )
-> on ( $tableNames [ 'permissions' ])
-> onDelete ( 'cascade' );
$table -> foreign ( 'role_id' )
-> references ( 'id' )
-> on ( $tableNames [ 'roles' ])
-> onDelete ( 'cascade' );
$table -> primary ([ 'permission_id' , 'role_id' ], 'role_has_permissions_permission_id_role_id_primary' );
});
app ( 'cache' )
-> store ( config ( 'permission.cache.store' ) != 'default' ? config ( 'permission.cache.store' ) : null )
-> forget ( config ( 'permission.cache.key' ));
}
/**
* Reverse the migrations .
*
* @ return void
*/
public function down ()
{
$tableNames = config ( 'permission.table_names' );
if ( empty ( $tableNames )) {
throw new \Exception ( 'Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.' );
}
Schema :: drop ( $tableNames [ 'role_has_permissions' ]);
Schema :: drop ( $tableNames [ 'model_has_roles' ]);
Schema :: drop ( $tableNames [ 'model_has_permissions' ]);
Schema :: drop ( $tableNames [ 'roles' ]);
Schema :: drop ( $tableNames [ 'permissions' ]);
}
}