【发布时间】:2020-07-27 07:30:00
【问题描述】:
DashboardController.php
class DashboardController extends Controller
{
function __construct()
{
$this->middleware('auth');
}
// codes.....
}
最初,我为任何身份验证用户创建了一个中间线来访问此仪表板。
目标:我只想为admin 和seller 制作这个dashboard。使普通用户无法访问仪表板路由。
怎么做?
参考表
users表
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('photo')->nullable();
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->longText('cartitems')->nullable();
$table->longText('wishlist')->nullable();
$table->unsignedBigInteger('discount')->default(0);
$table->rememberToken();
$table->timestamps();
});
这是
users表。
roles表
Schema::create('roles', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('display_name');
$table->timestamps();
});
这是
roles表。每个用户都有一个角色,例如Superadmin、admin、seller或customer
role_user表
Schema::create('role_user', function (Blueprint $table) {
$table->id();
$table->unsignedBigInteger('user_id');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->unsignedBigInteger('role_id');
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->timestamps();
});
在此数据透视表中建立
users和roles表之间的关系。
我已经尝试了这些步骤
DashboardController.php
function __construct()
{
$this->middleware('admin');
}
Kernel.php
'admin' => \App\Http\Middleware\Admin::class,
Admin.php [新中间线]
public function handle($request, Closure $next)
{
dd(Auth::user());
}
但是这个
Admin.php不能不访问当前经过身份验证的用户。
它显示 null
【问题讨论】:
-
您是使用任何角色权限包还是自己构建的??
-
不,我没有使用任何软件包。只有我使用的 laravel auth 包。并从头开始构建。
-
那你可以根据角色做一些中间件,用在路由上。
-
php public function handle($request, Closure $next) { if (Auth::user()->role->name == 'admin') { return $next($request); } return Redirect::route('dashboard.index'); // return $next($request); }.... 尝试...但错误.... -
哪个错误?请在您的问题中包含此代码?
标签: laravel authentication admin middleware