使用 laravel 为管理员用户创建中间件
Create middleware for admin user with laravel
我构建了一个简单的应用程序并且我有用户,但是一些用户需要有管理员权限,所以我尝试创建这个:
首先在迁移文件中添加布尔类型 - 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);
我构建了一个简单的应用程序并且我有用户,但是一些用户需要有管理员权限,所以我尝试创建这个:
首先在迁移文件中添加布尔类型 - 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);