laravel - 只有管理员角色才能访问 /admin。但它不工作
问题描述
用户.php:
public function IsAdmin(){
return $this->role=='admin';
}
Checkifadmin.php(中间件):
public function handle($request, Closure $next)
{
if (auth()->user()->role=='admin') {
return redirect(route('home'));
}
return $next($request);
}
内核.php:
在受保护的路线中
'checkifadmin' =>\App\Http\Middleware\Checkifadmin::class,
create_users_table.php
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->string('role')->default('customer');
$table->rememberToken();
$table->timestamps();
});
网页.php:
Route::get('admin',function(){
return view('layouts.admin');
})->middleware(['checkifadmin']);
Route::get('/', function () {
return view('index');
})->name('home');
Route::get('/shop/product', function () {
return view('shop.product');
})->name('shop.product');
Route::get('/shop/shoppingcard', function () {
return view('shop.shoppingcard');
})->name('shop.shoppingcard');
Route::get('/shop/checkout', function () {
return view('shop.checkout');
})->name('shop.checkout');
Auth::routes();
我的用户中有 2 个角色。客户和管理员,只有管理员应该有权访问 /admin 但由于某种原因它似乎不起作用。我已经复制并粘贴了我为这个问题所做的所有可能的代码,提前谢谢你
解决方案
admin
如果只允许在中间件中,则中间件应如下所示
Checkifadmin.php(中间件):
public function handle($request, Closure $next)
{
if (auth()->user()->role !='admin') {
return redirect(route('home'));
}
return $next($request);
}
然后你可以保持你的路线原样
Route::get('admin',function() {
return view('layouts.admin');
})->middleware(['checkifadmin']);
推荐阅读
- mongodb - Mongo聚合 - 在一次调用中对字典中的多个项目求和
- faunadb - 如何获取 FaunaDB 类的字段或模式
- html - 悬停后保持 Material Design lite 工具提示可见
- javascript - jQuery 位置选择器插件获取缩放
- ms-access - ms-access 根据表单选项在文本框中生成字符串
- amazon-web-services - AWS::EC2::Route 的 DestinationCidrBlock 属性
- c# - 产生不同类型动物的最佳方式?
- android - V7.app.NotificationCompat 不适用于奥利奥
- c# - 为什么 QueueClient 在与 Azure 服务总线通信时会崩溃,是否可以安全地保留它?
- html - 如何制作h3和
inline,不然怎么设计标题后面会有横线