😆1.2 Hoàn thành 1 project nhỏ Crud dựa trên bài viết gốc (ok)
https://acquaintsoft.com/blog/laravel-permission-demo
https://c-i-ph-n-m-m-tr-n-ubuntu-c-n-thi.gitbook.io/learn-lavarel/bai-viet-goc
![](https://c-i-ph-n-m-m-tr-n-ubuntu-c-n-thi.gitbook.io/~gitbook/image?url=https%3A%2F%2F1957079826-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MCBeDUD-PK_RF-YgJRe%252Fuploads%252FcclUnosvEY2ERHZULlRL%252Fimage.png%3Falt%3Dmedia%26token%3D86dce6ee-3ad9-4794-a227-c00437309d1e&width=768&dpr=4&quality=100&sign=53a3370f&sv=1)
1MB
lva1.zip
archive
Tạo một bảng Product để áp dụng Roles, Permissions 😎😎
![](https://c-i-ph-n-m-m-tr-n-ubuntu-c-n-thi.gitbook.io/~gitbook/image?url=https%3A%2F%2F1957079826-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MCBeDUD-PK_RF-YgJRe%252Fuploads%252FDWy4ie4ZOMLaPb9xqWDt%252Fimage.png%3Falt%3Dmedia%26token%3Dbcb25f32-7cfb-4ebd-8a6f-90f6d3fbb2a6&width=768&dpr=4&quality=100&sign=2ec28150&sv=1)
C:\xampp82\htdocs\lva1\app\Http\Controllers\Admin\PermissionController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Permission;
use Illuminate\Http\Request;
class PermissionController extends Controller
{
public function __construct()
{
$this->middleware('can:permission list', ['only' => ['index', 'show']]);
$this->middleware('can:permission create', ['only' => ['create', 'store']]);
$this->middleware('can:permission edit', ['only' => ['edit', 'update']]);
$this->middleware('can:permission delete', ['only' => ['destroy']]);
}
/**
* Display a listing of the resource.
*/
public function index()
{
$permissions = Permission::latest()->paginate(5);
return view('admin.permission.index', compact('permissions'))->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
return view('admin.permission.create');
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
$request->validate(['name' => 'required|string|max:255|unique:' . config('permission.table_names.permissions', 'permissions') . ',name']);
Permission::create(['name' => $request->name, 'guard_name' => 'web']);
return redirect()->route('permission.index')->with('message', 'Permission created successfully.');
}
/**
* Display the specified resource.
*/
public function show(Permission $permission)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(Permission $permission)
{
return view('admin.permission.edit', compact('permission'));
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, Permission $permission)
{
$request->validate(['name' => 'required|string|max:255|unique:' . config('permission.table_names.permissions', 'permissions') . ',name,' . $permission->id,]);
$permission->update(['name' => $request->name, 'guard_name' => 'web']);
return redirect()->route('permission.index')->with('message', 'Permission updated successfully.');
}
/**
* Remove the specified resource from storage.
*/
public function destroy(Permission $permission)
{
$permission->delete();
return redirect()->route('permission.index')->with('message', 'Permission deleted successfully');
}
}
C:\xampp82\htdocs\lva1\routes\web.php
<?php
use App\Http\Controllers\Admin\PermissionController;
use App\Http\Controllers\Admin\RoleController;
use App\Http\Controllers\Admin\UserController;
use App\Http\Controllers\Admin\ProductController;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware(['auth'])->name('dashboard');
Route::prefix('admin')->namespace('App\Http\Controllers\Admin')->middleware(['auth'])->group(function () {
Route::resource('permission', PermissionController::class);
Route::resource('role', RoleController::class);
Route::resource('user', UserController::class);
Route::get('edit-account-info', [UserController::class, 'profileInformation'])->name('admin.profile.info');
Route::post('edit-account-info', [UserController::class, 'profileInformationStore'])->name('admin.profile.info.store');
Route::post('change-password', [UserController::class, 'changePasswordStore'])->name('admin.profile.password.store');
Route::resource('product', ProductController::class);
});
C:\xampp82\htdocs\lva1\resources\views\products\index.blade.php
<x-app-layout>
<x-slot name="header">
<h2 class="font-semibold text-xl text-gray-800 leading-tight">
{{ __('Products') }}
</h2>
</x-slot>
<div class="py-12">
<div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
<div class="bg-white overflow-hidden shadow-sm sm:rounded-lg">
<div class="p-6 bg-white border-b border-gray-200">
<div class="flex flex-col mt-8">
@can('product create')
<div class="d-print-none with-border mb-8">
<a href="{{ route('product.create') }}"
class="text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg text-sm px-5 py-2.5 text-center mr-2 mb-2 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800">{{
__('Add Product') }}</a>
</div>
@endcan
<div class="py-2">
@if(session()->has('message'))
<div class="mb-8 text-green-400 font-bold">
{{ session()->get('message') }}
</div>
@endif
<div class="min-w-full border-b border-gray-200 shadow">
<form method="GET" action="{{ route('product.index') }}">
<div class="py-2 flex">
<div class="overflow-hidden flex pl-4">
<input type="search" name="search" value="{{ request()->input('search') }}"
class="rounded-md shadow-sm border-gray-300 focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"
placeholder="Search">
<button type='submit'
class='ml-4 inline-flex items-center px-4 py-2 bg-gray-800 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-gray-700 active:bg-gray-900 focus:outline-none focus:border-gray-900 focus:ring ring-gray-300 disabled:opacity-25 transition ease-in-out duration-150'>
{{ __('Search') }}
</button>
</div>
</div>
</form>
<table class="border-collapse table-auto w-full text-sm">
<thead>
<tr>
<th
class="py-4 px-6 bg-grey-lightest font-bold uppercase text-sm text-grey-dark border-b border-grey-light text-left">
</th>
@canany(['product edit', 'product delete'])
<th
class="py-4 px-6 bg-grey-lightest font-bold uppercase text-sm text-grey-dark border-b border-grey-light text-left">
{{ __('Actions') }}
</th>
@endcanany
</tr>
</thead>
<tbody class="bg-white dark:bg-slate-800">
@foreach($products as $product)
<tr>
<td
class="border-b border-slate-100 dark:border-slate-700 p-4 pl-8 text-slate-500 dark:text-slate-400">
<div class="text-sm text-gray-900">
<a href="{{route('product.show', $product->id)}}"
class="no-underline hover:underline text-cyan-600 dark:text-cyan-400">{{ $product->title
}}</a>
</div>
</td>
@canany(['product edit', 'product delete'])
<td
class="border-b border-slate-100 dark:border-slate-700 p-4 pl-8 text-slate-500 dark:text-slate-400">
<form action="{{ route('product.destroy', $product->id) }}" method="POST">
@can('product edit')
<a href="{{route('product.edit', $product->id)}}"
class="px-4 py-2 text-white mr-4 bg-blue-600">
{{ __('Edit') }}
</a>
@endcan
@can('product delete')
@csrf
@method('DELETE')
<button class="px-4 py-2 text-white bg-red-600">
{{ __('Delete') }}
</button>
@endcan
</form>
</td>
@endcanany
</tr>
@endforeach
</tbody>
</table>
</div>
<div class="py-8">
{{ $products->appends(request()->query())->links() }}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</x-app-layout>
Test
![](https://c-i-ph-n-m-m-tr-n-ubuntu-c-n-thi.gitbook.io/~gitbook/image?url=https%3A%2F%2F1957079826-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MCBeDUD-PK_RF-YgJRe%252Fuploads%252F7ZraXVcZHApmb3LRp9L5%252Fimage.png%3Falt%3Dmedia%26token%3Dcdf1b689-9edb-4e71-9ce6-5e3bfa713f4a&width=768&dpr=4&quality=100&sign=a8212287&sv=1)
![](https://c-i-ph-n-m-m-tr-n-ubuntu-c-n-thi.gitbook.io/~gitbook/image?url=https%3A%2F%2F1957079826-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-MCBeDUD-PK_RF-YgJRe%252Fuploads%252F1X83ZdweqYU5eA5uKMqe%252Fimage.png%3Falt%3Dmedia%26token%3D5966fe3f-5705-4fbb-ad26-6c4215afcdc0&width=768&dpr=4&quality=100&sign=a6a7ce12&sv=1)
1MB
lva1-2.zip
archive
Previous1.1 Create sample data (ok)Next=== START Step by step guide for using Laravel-permissions package from spatie ===
Last updated