最近在开发fastadmin框架中,遇到一个客户想要实现 子账号没有搜索功能,主账号有搜索功能。刚开始说到这个功能的时候,第一反应是开发不了,因为fastadmin框架并没有搜索框的权限管理功能,在官方的社区上对fastadmin的表格的介绍:https://ask.fastadmin.net/article/323.html ,上面只提到了显示隐藏,并没有权限相关管理,原文如下:
7.浏览模式、显示隐藏列、导出、通用搜索
浏览模式可以切换卡片视图和表格视图两种模式,如果不需要此功能,可以设置showToggle: false
显示隐藏列可以快速切换字段列的显示和隐藏,如果不需要此功能,可以设置showColumns: false
,如果想要表格中的字段列默认隐藏可以设置字段属性visible: false
即可默认隐藏
导出按钮默认将导出整个表的所有行,如果需要仅导出当前分页的数据,需要设置exportDataType: 'basic'
,如果想导出选中的行,则可以设置为exportDataType: 'selected'
,如果不需要此功能,可以设置showExport: false
通用搜索指表格上方的搜索,通用搜索的表单默认是隐藏的,如果需要默认显示,需要设置searchFormVisible: true
,如果不需要通用搜索功能,可以设置commonSearch: false
。如果想要控制字段列不参考搜索则可以设置字段列属性为operate: false
即可。
那我怎么实现搜索框的权限管理呢? 严格的说,我只是实现了在子账号无法使用fastadmin的搜索功能,搜索框还是会显示在页面上的,以下是我的实现思路:前提是,子账号登录后台的时候,只查询和子账号ID相关的列表信息。通过admin_id来判断是否是子账号,子账号不使用系统自带的where条件,就实现了子账号登录搜索功能失效的目的。以下是代码:
if ($this->auth->id >1) { //1. 根据ID 寻找 该管理员对应的任务ID $task_ids = Db::name('task_content')->where('admin_id', $this->auth->id)->field('id')->select(); $list = $this->model ->with(['user','content']) ->where('task_content_id', 'in', [implode(',', array_column($task_ids, 'id'))]) // ->where($where) ->order($sort, $order) ->paginate($limit); } else { $list = $this->model ->with(['user','content']) ->where($where) ->order($sort, $order) ->paginate($limit); } 通过以上的where条件的修改,就实现了超级管理员账号可以有搜索功能,子账号没有搜索功能。通过ID的判断使用这个方法也可以指定子账号有搜索权限,其他账号没有搜索权限。