在使用 Laravel-admin 的日常開發中,經常需要編寫資源排序及後臺使用者操作許可權等問題,在每個 Controller 裡寫相同的程式碼顯得非常冗餘,有沒有好的辦法把這些程式碼抽離出來呢?
當然有啦!
在 app/Admin/bootstrap.php
檔案中新增以下程式碼即可:
<?php
use Encore\Admin\Grid;
use Encore\Admin\Facades\Admin;
Encore\Admin\Form::forget(['map', 'editor']);
Grid::init(function (Grid $grid) {
// 排序
$order_ignore_models = [];
if (!in_array(get_class($grid->model()->eloquent()), $order_ignore_models)) {
$grid->model()->orderBy('id', 'desc');
}
// 許可權
$permissions = [
'index',
'view',
'create',
'edit',
'delete',
];
$user_permissions = [];
foreach ($permissions as $permission) {
// 這裡的許可權名稱要事先約定好,為 `table-name.permission`
$user_permissions[$permission] = str_replace('_', '-', $grid->model()->getTable()) . '.' . $permission;
}
if (Admin::user()->cannot($user_permissions['create'])) {
$grid->disableCreateButton();
}
$grid->actions(function (Grid\Displayers\Actions $actions) use ($user_permissions) {
if (Admin::user()->cannot($user_permissions['delete'])) {
$actions->disableDelete();
}
if (Admin::user()->cannot($user_permissions['edit'])) {
$actions->disableEdit();
}
if (Admin::user()->cannot($user_permissions['view'])) {
$actions->disableView();
}
});
});
本作品採用《CC 協議》,轉載必須註明作者和本文連結