AdminMiddlewareを使用して管理パネルのユーザーのアクセス許可を設定するシンプルなシステムを作成しました。 すべてのユーザはグループ、ポスト、ページ....Laravrl5-全モジュールコントローラのユーザーアクセス権
ルート/ウェブのような権限があります。だから私はそのすべてのユーザー権限の一覧を取得AdminMiddleware
public function handle($request, Closure $next)
{
if(Auth::check()){
if ($request->user()->user_type !== 'man')
{
return redirect('/');
}
$user_permissions = Auth::user()->permissions;
foreach($user_permissions as $value){
$controller = Controllers::get_controller($value->controller_id);
$permissions['name'] = $controller->controller_name;
$all_permissions[] = $permissions;
unset($permissions);
}
foreach ($all_permissions as $value){
$controllers[] = trim($value['name']);
}
$request->user()->controllers = $controllers;
return $next($request);
}
else{
return redirect('/login');
}
}
で
Route::group(['middleware' => 'admin'], function()
{
Route::get('/admin' , 'admin\[email protected]')->name('admin');
//all admin panel routes
}
をコントローラの名前を表し、すべてのコントローラを表します(このコントローラでは、ユーザがデータを見るためにユーザコントローラにアクセスするための 'users'というアクセス権を持っているかどうかをチェックします)。
protected $user;
public function __construct(){
$this->middleware(function ($request, $next) {
$this->user= Auth::user();
if(!in_array('users',$this->user->controllers)){
session()->flash('error' , 'No permission');
return redirect('/admin');
}
else{
return $next($request);
}
});
}
これはすべてのコントローラに使用されており、小さなプロジェクトでも機能しますが、モジュール(nWidart/laravel-modules)の大きなプロジェクトの場合は難しくなります。私が望むのは、モジュール全体のパーミッションをチェックすることです。だから、もし私がblogという名前のモジュールを持っていたら、ログインしたユーザがそのモジュールのコントローラにアクセスする権限を持っているかどうかを確認したいのですが、どうすればこのことができますか?
ルートでごモジュールのルートを追加し、このグループにアクセスする権限かどうかを確認そのルートグループのミドルウェアを追加します。それはララベルが独自のルートで行うことです。 – apokryfos