Table of Content
- Introduction
- Installation
- Traits Models
- Struktur Table
- Roles
- Permissions
- Blade Directives
- Artisan
- The Controller
- Studi Kasus
Introduction
Laravel Permission Role digunakan untuk membuat perizinan pada role. Saya biasa menggunakan package milik spatie.be
Installation
Buka terminal, ketik :
composer require spatie/laravel-permission
Service Providers
'providers' => [
// ...
Spatie\Permission\PermissionServiceProvider::class,
];Publish
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"Clear Cache
php artisan optimize:clear
# or
php artisan config:clear
Traits Models
Sebelum menggunakannya, kita harus traits model. Sebagai contoh saya menggunakan model User
use Illuminate\Foundation\Auth\User as Authenticatable;
use Spatie\Permission\Traits\HasRoles;
class User extends Authenticatable
{
use HasRoles;
// ...
}Struktur Table
Roles
Table ini digunakan untuk membuat roles beserta guard nya. Sebagai contoh : id 1 berisikan role Admin.
tb : roles
- id (int)
- name (varchar 255)
- guard_name (varchar 255)
- created_at (timestamp)
- updated_at (timestamp)
Model Has Roles
Berisikan user beserta role yang dimilikinya. Sebagai contoh : user dengan id 1 itu admin. Berarti dia memiliki role_id 1.
tb: model_has_roles
- role_id (int)
- model_type (varchar 255)
- model_id (int)
Permissions
Table ini digunakan untuk membuat permission atau perizinan beserta guard nya. Sebagai contoh : membuat permission untuk melakukan hapus data pengguna.
tb: permissions
- id (int)
- name (varchar 255)
- guard_name (varchar 255)
- created_at (timestamp)
- updated_at (timestamp)
Role Has Permissions
Seperti nama nya, table ini berisikan role beserta permission nya. Sebagai contoh : hanya role admin yang memiliki akses untuk menghapus data pengguna.
tb: role_has_permissions
- permission_id (int)
- role_id (int)
Model Has Permission
Berisikan model beserta permission nya. Sebagai contoh : beberapa user memiliki hak akses / permission untuk menghapus data pengguna.
tb: model_has_permissions
- permission_id (int)
- model_type (varchar 255)
- model_id (int)
Roles
Membuat Roles
use Spatie\Permission\Models\Role;
$role = Role::create(['name' => 'admin']);Menghubungkan Roles Dan Permissions
otomatis akan membuat data di table role_has_permissions
$role->givePermissionTo($permission);Menghubungkan Role Dan Model
Secara otomatis data akan masuk di table model_has_roles
$user = User::create([
....................
]);
$user->assignRole('admin');Menghapus Role
$permission->removeRole($role);Permissions
Membuat Permissions
use Spatie\Permission\Models\Permission;
$permission = Permission::create(['name' => 'delete articles']);Menghubungkan Permissions Dan Roles
$permission->assignRole($role);Menghubungkan Role Dan Permissions
Secara otomatis akan dibuatkan data di tabel model_has_permissions
$user = User::create([
....................
]);
$user->givePermissionTo('delete articles');Menghapus Permissions
$role->revokePermissionTo($permission);The HasRoles trait adds Eloquent relationships to your models, which can be accessed directly or used as a base query:
// get a list of all permissions directly assigned to the user
$permissionNames = $user->getPermissionNames(); // collection of name strings
$permissions = $user->permissions; // collection of permission objects
// get all permissions for the user, either directly, or from roles, or from both
$permissions = $user->getDirectPermissions();
$permissions = $user->getPermissionsViaRoles();
$permissions = $user->getAllPermissions();
// get the names of the user's roles
$roles = $user->getRoleNames(); // Returns a collectionBlade Directives
Permissions
Kita dapat menggunakan @can untuk memperbolehkan suatu user mengakses fitur kita.
@if(auth()->user()->can('edit articles') && $some_other_condition)
//
@endif
Artisan
Membuat Role dan Permissions
php artisan permission:create-role writer
php artisan permission:create-permission "edit articles"
Membuat role, sekaligus menghubungkan ke permissions nya
php artisan permission:create-role writer web "create articles|edit articles"
Displaying Role dan Permissions
php artisan permission:show
The Controller
public function __construct()
{
$this->middleware(['role:admin','permission:create articles']);
}Studi Kasus
Login
if(auth()->attempt(['username' => $request->username,'password' => $request->password]))
{
$user = Auth::user();
if($user->hasRole('admin')){
.............
}elseif($user->hasRole('guru')){
.............
}Jika role access manual menggunakan id_role, ketika kita menggunakan laravel-permission tidak menggunakan id_role pada table users