私は複数の管理システムを持っています:1つはスーパー管理者で、もう1つは通常の管理者で、ユーザテーブルのis_admin
属性で区別されます。複数のAdminMiddlewareのあいまいさ
そして、これら二つのミドルウェア: SuperAdminMiddleware.php
public function handle($request, Closure $next, $guard = null)
{
if(Auth::check())
{
if($request->user()->is_admin==1)
{
return $next($request);
}
return redirect('/login');
}
else
{
return redirect('/login');
}
}
と、NormalAdminMiddleware.php
public function handle($request, Closure $next, $guard = null)
{
if(Auth::check())
{
if($request->user()->is_admin==2)
{
return $next($request);
}
return redirect('/login');
}
else
{
return redirect('/login');
}
}
とloginControllerで:
protected function authenticated()
{
if (auth()->user()->is_admin==1) {
return redirect('/super-admin');
}
else if(auth()->user()->is_admin==2){
return redirect('/normal-admin');
}
else {
return redirect('/home');
}
}
ここで、削除と読み取りは、スーパー管理者がすべてのユーザーの詳細を削除して見ることができるように設計されていますが、通常の管理者は自分の市のユーザーしか見ることができません。
id name city is_admin
1 Non Maety 1
3 Pom Lorey 2
4 Rom Lorey 0
2 Yer Easter 0
ノンはすべて見ることができるはずです。 PomはID3と4だけを表示するはずです。
SuperAdminMiddlewareでルートを表示して削除すると、通常の管理者は都市のレコードを見ることができませんでした。
Route::group(['middleware' => ['App\Http\Middleware\SuperAdminMiddleware']], function() {
Route::get('/show/{id}', '[email protected]');
Route::post('/delete', '[email protected]');
});
と私はSuperAdminMiddlewareとNormalAddminMiddlewareの両方でこれらのルートを置く場合。 NormalAdminMiddlewareは他の都市のレコードも見ることができます。
Route::group(['middleware' => ['App\Http\Middleware\NormalAdminMiddleware']], function() {
Route::get('/show/{id}', '[email protected]');
Route::post('/delete', '[email protected]');
});
この状況をどのように克服できますか?
最初にミドルウェアの条件に従って、両方を使用している場合、いずれのミドルウェアもsuperadminとnormaladminの両方で失敗するため、両方のユーザーはアクセスできません。 スーパーグループとnormaladminのルートグループを区切る必要があります。あなたのコントローラからは、出力を達成するためにwhere句を渡すことができます – Hari
この時点で、あなたは中間を簡素化し、 'is_admin> 0 'のチェックを1つだけ使用できます。ミドルウェアは、コンテンツ/ボタンや、レベル。アクションの権限を確認するには、Gate/Policiesのhttps://laravel.com/docs/5.4/authorizationを調べることをお勧めします。 AdminMiddlewareを使用して、ユーザーがルートにアクセスすることが許可されているかどうかを確認し、ゲート/ポリシーオブジェクトを使用して個々のルートを確認してください。 – Ken
@Kenは+1を取得します。スーパーユーザーとノーマルユーザーは、自分が果たす役割とアクセス許可によって最も区別されます。また、[entrust](https:// githubなど)などのACLパッケージを検討することもできます。com/Zizaco/entrust)または[Sentinel](https://github.com/cartalyst/sentinel)を参照してください。 – joshuamabina