无法对两个中间件进行分组
Unable to group the two Middlewares
我正在尝试在我的应用程序中实现 3 种用户类型,我使用的是 Laravel 的默认身份验证。
我创建了 2 个额外的中间件来实现额外用户(管理员和 Districtlogin)条件以及用户批准中间件,并使用 laravel 用户
的默认值
Admin middleware
class Admin
{
tion handle($request, Closure $next)
{
if( Auth::check() && Auth::user()->isAdmin == 1)
{
return $next($request);
}
Auth::logout();
return redirect('login')->with('error','You have not admin access');
}
}
Districtlogin Middleware
class Districtlogin
{
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->isAdmin == 2) {
return $next($request);
}
Auth::logout();
return redirect('login')->with('error', 'You have not admin access');
}
}
One additional middleware to check if the user is approved
class ApproveUser
{
public function handle($request, Closure $next)
{
if( Auth::check() && Auth::user()->row_status == 1)
{
return $next($request);
}
return redirect('/userapprove');
}
我可以根据登录信息重定向他们
Auth/LoginController
public function redirectPath()
{
if (Auth::user()->isAdmin == 1 && Auth::user()->row_status == 1) {
return '/adminindex';
} elseif (Auth::user()->row_status == 0) {
return '/userapprove';
} elseif (Auth::user()->isAdmin == 2 && Auth::user()->row_status == 1) {
return '/districtindex';
}
return '/engineerdashboard';
}
这是我的
kernel.php
条目
'admin' => \App\Http\Middleware\Admin::class,
'districtlogin' => \App\Http\Middleware\Districtlogin::class,
'userapprove' => \App\Http\Middleware\ApproveUser::class,
我想将 admin 和 Districtlogin 中间件分组。
我正在使用 CRUD,我希望 Districtlogin 能够访问几个控制器 - 索引、存储、更新
当我尝试对中间件进行分组时,我被重定向回登录屏幕。两个中间件都不起作用
这是我试过的,
1)
Route::middleware(['admin'])->group(function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController')->middleware('districtlogin');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
2)
Route::middleware(['admin','districtlogin'])->group(function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
3)
Route::middleware(['admin',''])->group(function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
Route::middleware(['districtlogin'])->group(function () {
Route::resource('adminindex', 'AdminindexController');
});
});
但是当我使用 'OR' 条件时,我能够访问页面
Route::group(['middleware' => ['admin' OR 'districtlogin']], function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
两个中间件都可以访问控制器。但是我如何根据中间件来限制 Crud 功能。
我完全不知道如何实现它。
完整答案是:
这两个中间件彼此不兼容,它们没有共同点。一个成功另一个失败并重定向到登录页面。
所以这解释了你问题的第一部分。
第二部分是Route::group(['middleware' => ['admin' OR 'districtlogin']]
..对于配置中间件毫无意义。它等同于 Route::group(['middleware' => ['admin']]
.. 因为表达式 'admin' OR 'districtlogin'
总是求得第一个操作数。另外它具有误导性,因为 Laravel 不支持中间件之一或另一个 这是无意义的表达。
解决方法:
要么使用一个中间件可以同时支持这两个选项,例如:
class AdminOrDistrictlogin
{
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->isAdmin >= 1 ) {
return $next($request);
}
Auth::logout();
return redirect('login')->with('error', 'You have not admin access');
}
}
entry:
'adminOrdistrict' => \App\Http\Middleware\AdminOrDistrictlogin::class,
'userapprove' => \App\Http\Middleware\ApproveUser::class,
routes
:
Route::middleware(['adminOrdistrict'])->group(function () {
//Admin or District Dashboard, distignuish later in your code
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
并在您的控制器和视图中通过检查 Auth::user()->isAdmin
值进一步优化以区分简单管理员或地区
或,如果简单管理员和学区之间的功能差异很大,为admin
创建新的和不同的路由和 district
并为每种类型的用户在适当的路由组中使用每个中间件。
例如:
Route::middleware(['admin'])->group(function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
Route::middleware(['districtlogin'])->group(function () {
//District Dashboard
Route::resource('districtindex', 'DistrictindexController');
Route::get('districtindex/new', 'DistrictindexController@admindashboard');
});
选择权在你:)
我正在尝试在我的应用程序中实现 3 种用户类型,我使用的是 Laravel 的默认身份验证。
我创建了 2 个额外的中间件来实现额外用户(管理员和 Districtlogin)条件以及用户批准中间件,并使用 laravel 用户
的默认值Admin middleware
class Admin
{
tion handle($request, Closure $next)
{
if( Auth::check() && Auth::user()->isAdmin == 1)
{
return $next($request);
}
Auth::logout();
return redirect('login')->with('error','You have not admin access');
}
}
Districtlogin Middleware
class Districtlogin
{
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->isAdmin == 2) {
return $next($request);
}
Auth::logout();
return redirect('login')->with('error', 'You have not admin access');
}
}
One additional middleware to check if the user is approved
class ApproveUser
{
public function handle($request, Closure $next)
{
if( Auth::check() && Auth::user()->row_status == 1)
{
return $next($request);
}
return redirect('/userapprove');
}
我可以根据登录信息重定向他们
Auth/LoginController
public function redirectPath()
{
if (Auth::user()->isAdmin == 1 && Auth::user()->row_status == 1) {
return '/adminindex';
} elseif (Auth::user()->row_status == 0) {
return '/userapprove';
} elseif (Auth::user()->isAdmin == 2 && Auth::user()->row_status == 1) {
return '/districtindex';
}
return '/engineerdashboard';
}
这是我的
kernel.php
条目
'admin' => \App\Http\Middleware\Admin::class,
'districtlogin' => \App\Http\Middleware\Districtlogin::class,
'userapprove' => \App\Http\Middleware\ApproveUser::class,
我想将 admin 和 Districtlogin 中间件分组。
我正在使用 CRUD,我希望 Districtlogin 能够访问几个控制器 - 索引、存储、更新
当我尝试对中间件进行分组时,我被重定向回登录屏幕。两个中间件都不起作用
这是我试过的,
1)
Route::middleware(['admin'])->group(function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController')->middleware('districtlogin');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
2)
Route::middleware(['admin','districtlogin'])->group(function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
3)
Route::middleware(['admin',''])->group(function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
Route::middleware(['districtlogin'])->group(function () {
Route::resource('adminindex', 'AdminindexController');
});
});
但是当我使用 'OR' 条件时,我能够访问页面
Route::group(['middleware' => ['admin' OR 'districtlogin']], function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
两个中间件都可以访问控制器。但是我如何根据中间件来限制 Crud 功能。
我完全不知道如何实现它。
完整答案是:
这两个中间件彼此不兼容,它们没有共同点。一个成功另一个失败并重定向到登录页面。
所以这解释了你问题的第一部分。
第二部分是Route::group(['middleware' => ['admin' OR 'districtlogin']]
..对于配置中间件毫无意义。它等同于 Route::group(['middleware' => ['admin']]
.. 因为表达式 'admin' OR 'districtlogin'
总是求得第一个操作数。另外它具有误导性,因为 Laravel 不支持中间件之一或另一个 这是无意义的表达。
解决方法:
要么使用一个中间件可以同时支持这两个选项,例如:
class AdminOrDistrictlogin
{
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::user()->isAdmin >= 1 ) {
return $next($request);
}
Auth::logout();
return redirect('login')->with('error', 'You have not admin access');
}
}
entry:
'adminOrdistrict' => \App\Http\Middleware\AdminOrDistrictlogin::class,
'userapprove' => \App\Http\Middleware\ApproveUser::class,
routes
:
Route::middleware(['adminOrdistrict'])->group(function () {
//Admin or District Dashboard, distignuish later in your code
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
并在您的控制器和视图中通过检查 Auth::user()->isAdmin
值进一步优化以区分简单管理员或地区
或,如果简单管理员和学区之间的功能差异很大,为admin
创建新的和不同的路由和 district
并为每种类型的用户在适当的路由组中使用每个中间件。
例如:
Route::middleware(['admin'])->group(function () {
//Admin Dashboard
Route::resource('adminindex', 'AdminindexController');
Route::get('adminindex/new', 'AdminindexController@admindashboard');
});
Route::middleware(['districtlogin'])->group(function () {
//District Dashboard
Route::resource('districtindex', 'DistrictindexController');
Route::get('districtindex/new', 'DistrictindexController@admindashboard');
});
选择权在你:)