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

Create middleware for admin user with laravel

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

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

    public 函数向上()

     {
            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);
    }
}

offcource 现在我需要在用户模型文件中创建函数 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 时,我得到了这个错误:

BadMethodCallException in Builder.php line 2071: Call to undefined method 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');
    }

但这不起作用,我不知道为什么...所以我的要求是,如果经过身份验证的用户的管理列为真,则保存文章...

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

我认为你应该替换这个:

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

有了这个:

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