如何通过fastAdmin实现权限控制与关联查询的深度学习与应用?

2026-04-02 03:321阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1159个文字,预计阅读时间需要5分钟。

如何通过fastAdmin实现权限控制与关联查询的深度学习与应用?

一、权限控制在基类中,我们定义了以下两个属性:- protected $noNeedLogin=[]; // 无需登录的方法- protected $noNeedRight=[]; // 无需鉴权的方法,但需要登录

注释说明:- 无需登录的方法,同时也不需要鉴权- 无需鉴权的方法,但需要登录


一、权限控制

在基类中我们有定义以下两个属性

protected $noNeedLogin = []; //无需登录的方法,同时也就不需要鉴权了 protected $noNeedRight = []; //无需鉴权的方法,但需要登录

不定义以上两个属性,自定义的方法默认是需要登录及鉴权的

比如我们有定义一个方法mywork,而这个方法是不需要登录即可访问的,则我们需要在当前的控制器定义

protected $noNeedLogin = ['mywork'];

比如我们有定义一个方法mytest,而这个方法是需要登录后任何管理员都可以访问,则我们需要在当前的控制器定义

protected $noNeedRight = ['mytest'];

如果我们需要动态定义,请务必放在调用父类的_initialize方法之前,否则是不会生效的。


二、关联查询

目前FastAdmin后台index方法支持一对一关联查询,比如我们一篇文章有用户信息,我们在列出数据时需要同时列出用户id对应的用户名和用户昵称。

注意修改:分类表->admin,及 ->with(["admin"])

首先我们需要在当前控制器中添加以下属性

数据关联,必须加下面这行

protected $dataLimitField = 'admin_id'; //数据关联字段,当前控制器对应的模型表中必须存在该字段

protected $dataLimit = 'auth'; //默认基类中为false,表示不启用,可额外使用auth和personal两个值 //数据关联字段,必须加下面这行 protected $dataLimitField = 'admin_id'; //数据关联字段,当前控制器对应的模型表中必须存在该字段 protected $relationSearch = true; protected $searchFields=["admin_id", "admin.username", "admin.nickname"]; //关联查询设置

然后我们修改控制器的index方法,代码如下:

如何通过fastAdmin实现权限控制与关联查询的深度学习与应用?

public function index() { if ($this->request->isAjax()) { list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = $this->model ->with(["admin"]) ->where($where) ->order($sort, $order) ->count(); $list = $this->model ->with(["admin"]) ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); // 销毁给定的变量admin $list = collection($list)->toArray(); foreach ($list as $key => &$value) { unset($value["admin"]); } $result = array("total" => $total, "rows" => $list); return json($result); } return $this->view->fetch(); }

然后在控制器对应的model(非关联model)中添加以下代码:

注意修改:public function admin(),以及方法中的Category,和后面的主表中关联键名称 admin_id,绑定关联表中两项字段,在unset($value["admin"]);后,可以继续使用绑定的两个变量。

public function admin() { return $this->belongsTo('admin', 'admin_id')->setEagerlyType(0)->bind("username,nickname"); }

更多的关联用户可以参考TP5关联模型的章节:关联模型

我们在控制器对应的JS中可以直接使用关联表(分类表)中的category.idcategory.name等关联表的字段

//关联表返回值绑定两个变量,这里就可以直接引用变量名username了

// 初始化表格 table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, columns: [ [ {field: 'state', checkbox: true, }, {field: 'id', title: 'ID', operate: '='}, {field: 'title', title: __('Title'), operate: 'LIKE %...%'}, {field: 'category.image', title: __('Image'), operate: false, formatter: Table.api.formatter.image}, {field: 'username', title:"发布者用户名"}, //关联表返回值绑定两个变量,这里就可以直接引用变量名username了 {field: 'ip', title: __('IP'), operate: '='}, {field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange'}, {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} ] ], });


本文共计1159个文字,预计阅读时间需要5分钟。

如何通过fastAdmin实现权限控制与关联查询的深度学习与应用?

一、权限控制在基类中,我们定义了以下两个属性:- protected $noNeedLogin=[]; // 无需登录的方法- protected $noNeedRight=[]; // 无需鉴权的方法,但需要登录

注释说明:- 无需登录的方法,同时也不需要鉴权- 无需鉴权的方法,但需要登录


一、权限控制

在基类中我们有定义以下两个属性

protected $noNeedLogin = []; //无需登录的方法,同时也就不需要鉴权了 protected $noNeedRight = []; //无需鉴权的方法,但需要登录

不定义以上两个属性,自定义的方法默认是需要登录及鉴权的

比如我们有定义一个方法mywork,而这个方法是不需要登录即可访问的,则我们需要在当前的控制器定义

protected $noNeedLogin = ['mywork'];

比如我们有定义一个方法mytest,而这个方法是需要登录后任何管理员都可以访问,则我们需要在当前的控制器定义

protected $noNeedRight = ['mytest'];

如果我们需要动态定义,请务必放在调用父类的_initialize方法之前,否则是不会生效的。


二、关联查询

目前FastAdmin后台index方法支持一对一关联查询,比如我们一篇文章有用户信息,我们在列出数据时需要同时列出用户id对应的用户名和用户昵称。

注意修改:分类表->admin,及 ->with(["admin"])

首先我们需要在当前控制器中添加以下属性

数据关联,必须加下面这行

protected $dataLimitField = 'admin_id'; //数据关联字段,当前控制器对应的模型表中必须存在该字段

protected $dataLimit = 'auth'; //默认基类中为false,表示不启用,可额外使用auth和personal两个值 //数据关联字段,必须加下面这行 protected $dataLimitField = 'admin_id'; //数据关联字段,当前控制器对应的模型表中必须存在该字段 protected $relationSearch = true; protected $searchFields=["admin_id", "admin.username", "admin.nickname"]; //关联查询设置

然后我们修改控制器的index方法,代码如下:

如何通过fastAdmin实现权限控制与关联查询的深度学习与应用?

public function index() { if ($this->request->isAjax()) { list($where, $sort, $order, $offset, $limit) = $this->buildparams(); $total = $this->model ->with(["admin"]) ->where($where) ->order($sort, $order) ->count(); $list = $this->model ->with(["admin"]) ->where($where) ->order($sort, $order) ->limit($offset, $limit) ->select(); // 销毁给定的变量admin $list = collection($list)->toArray(); foreach ($list as $key => &$value) { unset($value["admin"]); } $result = array("total" => $total, "rows" => $list); return json($result); } return $this->view->fetch(); }

然后在控制器对应的model(非关联model)中添加以下代码:

注意修改:public function admin(),以及方法中的Category,和后面的主表中关联键名称 admin_id,绑定关联表中两项字段,在unset($value["admin"]);后,可以继续使用绑定的两个变量。

public function admin() { return $this->belongsTo('admin', 'admin_id')->setEagerlyType(0)->bind("username,nickname"); }

更多的关联用户可以参考TP5关联模型的章节:关联模型

我们在控制器对应的JS中可以直接使用关联表(分类表)中的category.idcategory.name等关联表的字段

//关联表返回值绑定两个变量,这里就可以直接引用变量名username了

// 初始化表格 table.bootstrapTable({ url: $.fn.bootstrapTable.defaults.extend.index_url, columns: [ [ {field: 'state', checkbox: true, }, {field: 'id', title: 'ID', operate: '='}, {field: 'title', title: __('Title'), operate: 'LIKE %...%'}, {field: 'category.image', title: __('Image'), operate: false, formatter: Table.api.formatter.image}, {field: 'username', title:"发布者用户名"}, //关联表返回值绑定两个变量,这里就可以直接引用变量名username了 {field: 'ip', title: __('IP'), operate: '='}, {field: 'createtime', title: __('Create time'), formatter: Table.api.formatter.datetime, operate: 'RANGE', addclass: 'datetimerange'}, {field: 'operate', title: __('Operate'), table: table, events: Table.api.events.operate, formatter: Table.api.formatter.operate} ] ], });