1

我们希望能够做一个功能,这个功能是给admin_user加一个viewself字段,当访问文章管理功能时,如果开启此字段,只展示admin用户自己的文章。

首先我们在数据库中给admin_user添加一个字段

image.png

新建一个Model继承Administrator,添加自己的字段

app\Models\CustomAdministrator.php

<?php
 
 
namespace App\Models;
 
 
use Encore\Admin\Auth\Database\Administrator;
 
class CustomAdministrator extends Administrator
{
    public function __construct( array $attributes = [] ) {
        parent::__construct( $attributes );
        array_push( $this->fillable, 'viewself' );
    }
}

新建一个controller 继承 UserController

app\Admin\Controllers\CustomUserController.php

<?php
namespace App\Admin\Controllers;
use Encore\Admin\Controllers\UserController;
 
class CustomUserController extends UserController {
    protected function grid() {
        $g = parent::grid();
        //$g->column( 'viewself', '只看自己' );
        $states = [
            'on' => ['text' => 'YES'],
            'off' => ['text' => 'NO'],
        ];
 
        $g->viewself()->switch($states);
        return $g;
    }
    public function form() {
        $f = parent::form();
        $f->switch( 'viewself','只看自己' );
        return $f;
    }
}

覆盖原来的adminuser的路由器

$router->resource( 'auth/users', CustomUserController::class );

重新访问

http://localhost:8000/admin/a...

就可以了

还未完哦!

来到文章管理,我们还要为文章添加控制显示,让开启viewself的用户只能查看自己的文章

来到:app\Admin\Controllers\PostsController.php

  protected function grid()
    {
        $grid = new Grid(new Posts);
        //获取自己权限下的内容
        $username = Admin::user()->viewself;
 
        if($username == 1){
 
            $grid->model()->where ('author_id', '=', Admin::user()->id);
 
        }
    }

LinAt
10 声望0 粉丝