当前位置 : 主页 > 网络编程 > PHP >

fastAdmin学习-权限控制及关联查询

来源:互联网 收集:自由互联 发布时间:2023-09-03
一、权限控制 在基类中我们有定义以下两个属性 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.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}
        ]
    ],
});


上一篇:fastAdmin 模型验证及视图渲染
下一篇:没有了
网友评论