問題描述
Laravel 8 ‑ 如果用戶有權調用路由,請簽入控制器 (Laravel 8 ‑ Check in Controller if user has permission to call route)
我有一個類來創建我的導航並且我使用 spatie 權限。現在我想在我定義的路線的幫助下建立導航。是否可以在構建導航之前檢查用戶是否可以訪問路線?
參考解法
方法 1:
Yes you can able to check permission of users. Below are the methods available in spatie permissions.
$user‑>hasPermissionTo('edit articles');
You can check if a user has Any of an array of permissions:
$user‑>hasAnyPermission(['edit articles', 'publish articles', 'unpublish articles']);
...or if a user has All of an array of permissions:
$user‑>hasAllPermissions(['edit articles', 'publish articles', 'unpublish articles']);
You can refer this link
$user is basically your auth()‑>user()
方法 2:
I am using Laravel 8.x version.
We can check the given permission in controller
file eg:
if(Auth::user()‑>can('product_view')){
// allowed statement will be here
}
while given permission can be checked in view
blade file eg:
@can('product_view')
// allowed statement will be here
@endcan
We can also check permission in routes/web.php
file:
Route::get('/products/productdetail', [ProductsController::class, 'productdetail'])‑>name('products.productdetail')‑>middleware('can:product_view');
Thanks a lot for asking this question. Happy to help :)
(by Robert Fels、Tansukh Rathod、Kamlesh)