简体   繁体   English

如何在 Laravel 的路由前缀中分配用户角色?

[英]How to asign user's role in route prefix in Laravel?

I've done something like this:我做了这样的事情:

web.php web.php

Route::group(['prefix' => {User Role}, 'middleware' => 'AuthUser:superadmin,admindesa'], function() {
    Route::get('/', 'DashboardC@index');
    Route::get('/penduduk', 'PendudukC@index');
    Route::get('/penduduk/{id}/detail', 'PendudukC@detail');
});

Route::group(['prefix' => 'superadmin', 'middleware' => 'AuthUser:superadmin'], function() {
    Route::get('/pengguna', 'PenggunaC@index');
    Route::get('/pengguna/{id}/edit', 'PenggunaC@edit');
    Route::post('/pengguna/{id}/prosesedit', 'PenggunaC@prosesEdit');
    Route::get('/pengguna/{id}/hapus', 'PenggunaC@hapus');
    Route::post('/ajax/pengguna', 'AjaxC@pengguna');
});

AuthUser.php AuthUser.php

class AuthUser
{
    public function handle($request, Closure $next, ...$roles)
    {
        $auth = auth('web')->user();
        if (!$auth || !in_array($auth->role, $roles)){
            \Session::flash('flash_message', array('pesan' => 'Silahkan login untuk melanjutkan', 'tipe' => 'warning'));
            return redirect()->route('login');
        }
        return $next($request);
    }
}

Anyone know what should I write to asign user's role in route prefix?任何人都知道我应该写什么来分配用户在路由前缀中的角色? {User Role} {用户角色}

//group Auth superadmin and admindesa
Route::middleware(['AuthUser:superadmin,admindesa'])->group(function () { 
     Route::get('/', 'DashboardC@index');
    Route::get('/penduduk', 'PendudukC@index');
    Route::get('/penduduk/{id}/detail', 'PendudukC@detail');
});

I've found the solution by simply adding role variable to the request我通过简单地将角色变量添加到请求中找到了解决方案

web.php web.php

Route::group(['prefix' => '{role}', 'middleware' => 'AuthUser:superadmin,admindesa'], function() {
    Route::get('/', 'DashboardC@index');
    Route::get('/penduduk', 'PendudukC@index');
    Route::get('/penduduk/{id}/detail', 'PendudukC@detail');
});

Route::group(['prefix' => 'superadmin', 'middleware' => 'AuthUser:superadmin'], function() {
    Route::get('/pengguna', 'PenggunaC@index');
    Route::get('/pengguna/{id}/edit', 'PenggunaC@edit');
    Route::post('/pengguna/{id}/prosesedit', 'PenggunaC@prosesEdit');
    Route::get('/pengguna/{id}/hapus', 'PenggunaC@hapus');
    Route::post('/ajax/pengguna', 'AjaxC@pengguna');
});

AuthUser.php AuthUser.php

class AuthUser
{
    public function handle($request, Closure $next, ...$roles)
    {
        $auth = auth('web')->user();
        if (!$auth || !in_array($auth->role, $roles)){
            return redirect()->route('login')->with('gagal','Silahkan login untuk melanjutkan');
        }
        $request->role = $auth->role; // <- this one
        return $next($request);
    }
}

Everytime you want to get {id} in any controller you HAVE to get {role} too like this:每次您想在任何 controller 中获得 {id} 时,您都必须像这样获得 {role} :

public function detail(Request $request, $role, $id) // <- this one
{
    $penduduk = Penduduk::with(['kabupaten', 'kecamatan', 'kelurahan', 'dusun', 'pendudukjb'])->find($id);
    $bantuan = array_column(json_decode($penduduk->pendudukjb, TRUE), 'id_master_jenis_bantuan');

    $detail = $request->modal ? '_detail' : 'detail';
    return view('penduduk/'.$detail, compact('penduduk', 'bantuan'));
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM