【发布时间】:2016-03-18 16:49:58
【问题描述】:
我构建了一个简单的应用程序,我有用户,但有些用户需要有管理员权限,所以我尝试创建这个:
-
首先在迁移文件中添加布尔类型 - 管理员:
公共函数 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);
}
}
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 我得到了这个错误:
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');
}
但这不起作用,我不知道为什么...所以我的要求是,如果经过身份验证的用户的管理列为 true,则保存文章...
你有什么建议?如何在我的应用中实现用户管理?
【问题讨论】:
-
看起来您的用户模型没有
is函数。 -
但是'is'是内置函数?
-
您为什么认为添加
Request会起作用?它的is函数与角色没有任何关系。你需要编写自己的自己的角色系统,使用自己的is函数,或者安装一个包。
标签: php laravel authentication routes middleware