巧用 Laravel-admin 的 Grid::init () 方法

在使用 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 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!