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

java哥 阅读:155 2021-09-06 12:00:49 评论:0
本文章主要介绍了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')); 
    }); 

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


标签:程序员
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号