laravel-admin导出部分数据,权限内数据

现在做admin遇到个需求,我们有很多渠道商,每个渠道商的数据不是互通的,那么我们就需要限制每个渠道商只能导出自己的数据.这时候使用laravel-admin自带的数据导出.结果出乎意料.因为默认都是导出整个数据的,及时你在初始化的时候指定每个渠道商只能查询自己的数据,但是导出却不是按照展示的数据来进行的.
研究了源码以后发现,laravel-admin是通过导出url的几个按钮来控制导出数据的,如下图所示,看最后面的这些就知道了.

D:\WWW\xxx\vendor\encore\laravel-admin\src\Grid\Concerns\CanExportGrid@getExportUrl产生的url

在这里插入图片描述

因此我们需要把我们渠道商的参数设置上去,我们来看一下他获取参数的方式,是使用request()->all(),那么,我们就可以使用下面的方式来设置url参数,这样的话渠道商就自己改不了他的渠道id,避免一些别有用心之人查看他人数据.

request()->offsetSet('channel_id', $channel_id);

改完之后,发现连接上面确实加上了这个参数,但是导出的时候仍旧没有起作用,还是导出了所有数据,这个时候我就猜到了,他导出的时候肯定是去比对了filter里面的字段,发现我们追加的参数不在指定字段内,因此就没有生效,无奈,就加了一个没有作用只是占位的channel_id字段,果不其然,解决了这个问题,说它是无用的字段,因为渠道商改不了,但是它的作用只是占个字段位置,避免导出的时候我们追加的参数被过滤掉.

    $filter->column(1 / 2, function ($filter) use ($products) {
        $filter->equal('product_id', trans('serialnumber.product_name'))->select($products);
        $filter->equal('tag', trans('serialnumber.batch_number'));
        // 就是下面这个占位置
        $filter->equal('channel', trans('serialnumber.channel'))->default(request('channel'));
    });

做完这些,导出数据就正常了,达到了预期.

关于php导出csv的一切相关的知识:
https://phppot.com/php/how-to-handle-csv-with-php-read-write-import-export-with-database/

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SHUIPING_YANG

你的鼓励是我创作的最大动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值