<?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illuminate\Support\Facades\Schema;returnnewclassextendsMigration{/** * Run the migrations.*/publicfunctionup():void{ Schema::create('roles',function(Blueprint$table){$table->id();$table->string('name');$table->string('guard_name');$table->timestamps();});}/** * Reverse the migrations.*/publicfunctiondown():void{ Schema::dropIfExists('roles');}};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('permissions', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('guard_name');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('permissions');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('role_has_permissions', function (Blueprint $table) {
$table->unsignedBigInteger('role_id');
$table->unsignedBigInteger('permission_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('role_has_permissions');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('model_has_roles', function (Blueprint $table) {
$table->unsignedBigInteger('model_id');
$table->string('model_type');
$table->unsignedBigInteger('role_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('model_has_roles');
}
};
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::create('model_has_permissions', function (Blueprint $table) {
$table->unsignedBigInteger('model_id');
$table->string('model_type');
$table->unsignedBigInteger('permission_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('model_has_permissions');
}
};
<?php
namespace Database\Seeders;
// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*/
public function run(): void
{
$this->call([
PermissionTableSeeder::class,
CreateAdminUserSeeder::class
]);
}
}
<?php
namespace Database\Seeders;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
class PermissionTableSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$permissions = [
'user-list',
'user-create',
'user-edit',
'user-delete',
'role-list',
'role-create',
'role-edit',
'role-delete',
'product-list',
'product-create',
'product-edit',
'product-delete'
];
foreach ($permissions as $permission) {
Permission::create(['name' => $permission]);
}
}
}
<?php
namespace Database\Seeders;
use App\Models\User;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class CreateAdminUserSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
$user = User::create([
'name' => 'lionel',
'email' => 'lionel@gmail.com',
'password' => bcrypt('lionel'),
]);
$role = Role::create(['name' => 'Administrator']);
$user->assignRole($role->id);
$permissions = Permission::pluck('id','id')->all();
$role->syncPermissions($permissions);
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$roles = Role::all();
return view('roles.index')->with(compact('roles'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$permissions = Permission::pluck('name', 'id')->all();
return view('roles.create')->with(compact('permissions'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$inputs = $request->all();
$role = Role::create($inputs);
$role->syncPermissions($inputs['permissions']);
return redirect(route('roles.index'));
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
$role = Role::find($id);
return view('roles.show', compact('role'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
$permissions = Permission::pluck('name', 'id')->all();
$role = Role::find($id);
$rolePermission = $role->permissions->pluck('id')->all();
return view('roles.edit', compact('permissions', 'role', 'rolePermission'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$inputs = $request->all();
$role = Role::find($id);
$role->update($inputs);
$role->syncPermissions($inputs['permissions']);
return redirect(route('roles.index'));
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
Role::find($id)->delete();
return redirect(route('roles.index'));
}
}
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Permission;
use Spatie\Permission\Models\Role;
class RoleController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
$roles = Role::all();
return view('roles.index')->with(compact('roles'));
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
$permissions = Permission::pluck('name', 'id')->all();
return view('roles.create')->with(compact('permissions'));
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$inputs = $request->all();
$role = Role::create($inputs);
$role->syncPermissions($inputs['permissions']);
return redirect(route('roles.index'));
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
$role = Role::find($id);
return view('roles.show', compact('role'));
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
$permissions = Permission::pluck('name', 'id')->all();
$role = Role::find($id);
$rolePermission = $role->permissions->pluck('id')->all();
return view('roles.edit', compact('permissions', 'role', 'rolePermission'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
$inputs = $request->all();
$role = Role::find($id);
$role->update($inputs);
$role->syncPermissions($inputs['permissions']);
return redirect(route('roles.index'));
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
Role::find($id)->delete();
return redirect(route('roles.index'));
}
}