Saya sedang membangun SPA dengan Laravel di backend dan VueJS2 sebagai penyedia frontend. Aplikasi akan menangani pengguna dengan 3 jenis peran: UserRole1, UserRole2 dan Admin. Ketika pengguna mendaftar ke aplikasi, dia memilih apakah dia ingin menjadi pengguna dengan Role1 atau pengguna dengan Role2 (pengguna admin diatur oleh saya langsung di database mysql). Jadi di database ada tabel "pengguna" dengan bidang yang disebut "peran":

  • UserRole1 => "peran"=1;
  • UserRole2 => "peran"=2;
  • Admin => "peran"=7.

Ketika seorang pengguna masuk, saya ingin mengarahkannya ke dasbor berbasis perannya, jadi saya memiliki 3 komponen Vue yang berbeda dan 3 rute, dan saya ingin mencegah pengguna dengan Role1 (atau Role2) mengakses dasbor Role2 atau Admin. Jelas, jika tamu mencoba mengakses dasbor, itu akan diarahkan ke halaman login, dan jika pengguna yang diautentikasi mencoba mengakses halaman tamu (seperti halaman Daftar), itu akan diarahkan ke halaman dasbor.

Saya ingin menetapkan parameter "userRole" untuk setiap rute, seperti di bawah ini:

    {
        path: '/app/userRole1/Dashboard',
        component: DashboardUserRole1,
        name: 'dashboardRole1',
        meta: {
            title: 'Dashboard Role1',
            userRole: 1
        },
    },
    {
        path: '/app/userRole2/Dashboard',
        component: DashboardUserRole2,
        name: 'dashboardRole2',
        meta: {
            title: 'Dashboard Role2',
            userRole: 2
        },
    },
    {
        path: '/app/Admin/Dashboard',
        component: DashboardAdmin,
        name: 'dashboardAdmin',
        meta: {
            title: 'Dashboard Admin',
            userRole: 7
        },
    },

Saya sudah mencoba dengan Laravel Passport API dan sekarang saya mencoba dengan JWT dan websanova/vue-auth, jadi di komponen "Login" ada permintaan posting ke rute "api/auth/login", yang meneruskan data ke metode AuthController@authenticate, yang mengembalikan respons json. Tetapi paket vue-auth tidak begitu cocok untuk kebutuhan saya, jadi saya pikir mungkin ada solusi yang lebih efisien tetapi sebenarnya saya tidak tahu cara menulis kode yang sesuai. Saya ingin tahu apakah Anda memiliki beberapa ide.

0
Giovanni Pio Cirillo 13 Maret 2019, 18:40

1 menjawab

Jawaban Terbaik

Solusi sederhana adalah menentukan rute api untuk mengambil informasi tentang pengguna yang diautentikasi. File rute api.php default Laravel berisi rute ini:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user();
});

Anda dapat memodifikasinya untuk menyertakan informasi apa pun yang perlu diketahui aplikasi Anda tentang pengguna untuk menangani logika perutean:

Route::middleware('auth:api')->get('/user', function (Request $request) {
    return $request->user()->load('roles');
});

Kemudian aliran Anda terlihat seperti ini:

  1. Masuk secara normal.
  2. Segera panggil /api/user, dan simpan tanggapannya.
  3. Gunakan peran yang disimpan untuk merutekan ke tampilan yang benar di SPA Anda.

Jika kebingungan seputar Langkah 3, pertanyaan stackoverflow ini mungkin bisa membantu.

1
Travis Britz 13 Maret 2019, 16:26