Tutorial Laravel Jetstream #8 : Teams Management


Tutorial  Laravel Jetstream #8 : Teams Management

Halo teman-teman semuanya, di artikel sebelumnya kita sudah belajar bersama-sama tentang API Support di dalam Laravel Jetstream, dan pada kesempatan kali ini kita semua akan belajar tentang Teams Management di dalam Laravel Jetstream.

Jika saat pertama kali membuat aplikasi dan kita tambahkan flag --teams. Maka secara otomatis aplikasi yang kita bangun akan dibautkan scaffolds untuk Teams Management.

Laravel Installer Dengan Teams

laravel new project-name --jet --teams

Composer Create-Project Dengan Teams

composer create-project --prefer-dist laravel/laravel project-name
composer require laravel/jetstream

Fitur team di Jetstream memungkinkan setiap pengguna terdaftar untuk membuat dan menjadi bagian dari banyak team. Secara default, setiap pengguna terdaftar akan menjadi bagian dari team “Personal”. Seperti contoh, jika pengguna bernama “Fika Ridaul Maulayya" membuat akun baru, maka secara otomatis akan di assign ke team bernama Fika's Team. Setelah registration, pengguna dapat mengganti nama tim ini atau membuat tim tambahan.


Views / Pages

Ketika kita menggunakan stack Livewire, maka untuk template membuat team baru akan di tempatkan di dalam resources/views/teams/create-team-form.blade.php. Dan jika kita menggunakan Inertia, maka templatenya akan di letakkan di dalam resources/js/Pages/Teams/CreateTeamForm.vue.

Actions

Untuk action dari proses logika pembuatan team dan menghapus team kita bisa temukan di dalam folder app/Actions/Jetstream, disini kita bisa melakukan modifikasi jika memang dibutuhkan. Di dalam action tersebut sudah include beberapa method, diantaranya seperti :

  • CreateTeam
  • UpdateTeamName
  • DeleteTeam

Inspecting User Teams

Untuk mengetahui informasi tentang pengguna dari team dapat kita temukan melalui method yang disediakan oleh Traits Laravel\Jetstream\HasTeams. Traits tersebut otomatis akan terhubung dengan Model user saat kita melakukan installasi Laravel jetstream. Traits ini menyediakan banyak method yang sangat bermanfaat yang memungkinkan kita dapat memerikan pengguna dari sebuah team.

// Access a user's currently selected team...
$user->currentTeam : Laravel\Jetstream\Team

// Access all of the team's (including owned teams) that a user belongs to...
$user->allTeams() : Illuminate\Support\Collection

// Access all of a user's owned teams...
$user->ownedTeams : Illuminate\Database\Eloquent\Collection

// Access all of the teams that a user belongs to but does not own...
$user->teams : Illuminate\Database\Eloquent\Collection

// Access a user's "personal" team...
$user->personalTeam() : Laravel\Jetstream\Team

// Determine if a user owns a given team...
$user->ownsTeam($team) : bool

// Determine if a user belongs to a given team...
$user->belongsToTeam($team) : bool

// Access an array of all permissions a user has for a given team...
$user->teamPermissions($team) : array

// Determine if a user has a given team permission...
$user->hasTeamPermission($team, 'server:create') : bool

Current Team

Setiap pengguna dalam aplikasi Jetstream memiliki “current team". Ini adalah team yang secara aktif melihat resource oleh pengguna, seperti contoh, jika kita sedang membuat aplikasi kalender, aplikasi kita akan menampilkan acara kalender yang akan datang untuk tim pengguna saat ini. Hanya akan tersedia untuk pengguna yang terdaftar di dalam team.

Kita dapat mengakses pengguna team saat ini menggunakan Eloquent Relationship, seperti contoh $user->currentTeam.

return App\Models\Calendar::where(
    'team_id', $request->user()->currentTeam->id
)->get()

Dari hasil di atas maka akan menampilkan semua pengguna yang memiliki team_id yang sama. Seorang pengguna dapat mengganti team mereka saat ini melalui menu dropdown profil yang tersedia dalam navigasi kanan atas.


Member Management

Anggota team dapat ditambahkan dan dihapus melalui tampilan “Team Settings". Logika backend yang mengelola action ini dapat disesuaikan sesuai kebutuhan di dalam class App\Actions\Jetstream\AddTeamMember.

Ketika kita menggunakan stack Livewire, maka tampilan yang digunakan untuk manajemen member dari sebuah team dapat dilihat di dalam resources/views/teams/team-member-manager.blade.php. Jika kita menggunakan stack Inertia, maka template tersebut akan tersedia di dalam resources/js/Pages/Teams/TeamMemberManager.vue

Jika kita ingin memodifikasi logika saat menambahkan member di dalam team, maka kita bisa mengubahnya di dalam App\Actions\Jetstream\AddTeamMember. Action ini bertanggung jawab untuk memvalidasi bahwa pengguna benar-benar dapat ditambahkan ke team dan kemudian menambahkan pengguna tersebut ke team

Roles / Permissions

Setiap anggota tim yang ditambahkan ke tim dapat di assign ke role tertentu, dan setiap role akan di assign beberapa permissions. Role permissions ditentukan di dalam JetstreamServiceProvider, menggunakan method Jetstream::role. Method ini menerima “slug" untuk nama role, permissions role, dan deskripsi role. Informasi ini akan digunakan untuk menampilkan role dalam tampilan manajemen anggota team

Jetstream::defaultApiTokenPermissions(['read']);

Jetstream::role('admin', 'Administrator', [
    'create',
    'read',
    'update',
    'delete',
])->description('Administrator users can perform any action.');

Jetstream::role('editor', 'Editor', [
    'read',
    'create',
    'update',
])->description('Editor users have the ability to read, create, and update.');


Authorization

Tentu saja, kita akan memerlukan cara untuk authorize bahwa request yang masuk oleh anggota team sebenarnya dapat dilakukan oleh pengguna tersebut. Permission team dari pengguna dapat diperiksa menggunakan method hasTeamPermission yang tersedi di dalam Traits Laravel\Jetstream\HasTeams.

if ($request->user()->hasTeamPermission($team, 'read')) {
    // The user's role includes the "read" permission...
}

Combining Team Permissions With API Permissions

Ketika kita membuat aplikasi dengan Laravel Jetstream, dimana ada fitur untuk API dan Team yang bisa kita verifikasi saat ada request permission team dan permission API Token.

/**
 * Determine whether the user can view a flight.
 *
 * @param  \App\Models\User  $user
 * @param  \App\Models\Flight  $flight
 * @return bool
 */
public function view(User $user, Flight $flight)
{
    return $user->belongsToTeam($flight->team) &&
           $user->hasTeamPermission($flight->team, 'flight:view') &&
           $user->tokenCan('flight:view');
}

Sampai disini pembahasan tentang seri Tutorial Laravel Jetstream, jika teman-teman semuanya memiliki problem atau kesulitan, silahkan bisa bertanya melalui kolom komentar di bawah. Terima Kasih


Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami