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