一、权限控制 在基类中我们有定义以下两个属性 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
方法,代码如下:
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.id
、category.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}
]
],
});