使用laravel为管理员用户创建中间件


Create middleware for admin user with laravel

我构建了一个简单的应用程序,我有用户,但有些用户需要拥有管理员权限,所以我尝试创建这个:

  1. 首先在迁移文件中,我添加了布尔类型-admin:

    公共函数up()

     {
            Schema::create('users', function (Blueprint $table) {
                $table->increments('id');
                $table->boolean('admin');
                $table->string('username');
                $table->string('email')->unique();
                $table->string('password', 60);
                $table->rememberToken();
                $table->timestamps();
            });
        }
    

之后我创建了新的中间件:

class RedirectIfNotAManager
{
    public function handle($request, Closure $next)
    {
        if (! $request->user()->IsATeamManager()){
            return redirect('articles');
        }
        return $next($request);
    }
}

现在我需要在用户模型文件:中创建函数IsATeamManager()

public function IsATeamManager(){
        if ($this->is('admin') {
            return true;
        }
        return false;
    }

在Kernel.php上,我添加了管理员:

 protected $routeMiddleware = [
        'auth' => 'App'Http'Middleware'Authenticate::class,
        'auth.basic' => 'Illuminate'Auth'Middleware'AuthenticateWithBasicAuth::class,
        'guest' => 'App'Http'Middleware'RedirectIfAuthenticated::class,
        'manager' => 'App'Http'Middleware'RedirectIfNotAManager::class,
    ];

在路线上我添加:

Route::get('foo', ['middleware'=>'manager', function(){
    return 'This Page is Only for Managers';
}]);

在phpMyAdmin中,我手动更改"1"中某些用户的用户管理列。。。我以那个用户的身份登录,

但是,当我尝试访问:localhost:8888/foo时,我会收到以下错误:

Builder.php第2071行中的BadMethodCallException:调用未定义方法Illuminate''Database''Query''Builder::is()

当我提出请求时,我还试图检查是否是经过身份验证的用户管理员,所以我写:

public function store(Requests'ArticleRequest $request)
    {
        $article = new Article($request->all());
        Auth::user()->is('admin')->articles()->save($article);
        return redirect('articles');
    }

但这不起作用,我不知道为什么。。。所以我的请求是,如果经过身份验证的用户拥有admin列true,那么保存文章。。。

你有什么建议?如何在我的应用程序中实现用户管理?

我认为你应该替换这个:

Auth::user()->is('admin')->articles()->save($article);

这个:

Auth::user()->where('admin', 1)->articles()->save($article);