Sekilas

Oke, pertama ini bukan hal baru. Di framework lain seperti Yii, Zend Framework, CakePHP, Rails, dst; fitur ini sudah lama ada. Tapi di Laravel, ini sesuatu yang baru.

Selama ini untuk ACL, sebenernya nggak sulit-sulit amat. Sudah banyak package lain yang bisa meng-handle masalah ini. Seperti Trusty, Sentry, Sentinel, Entrust, dan lain-lain. Dan untuk membuatnya sendiri-pun tidak sulit, hanya membutuhkan waktu beberapa menit.

Tapi setelah membaca tweet dari Taylor ini, sepertinya ACL akan dimasukkan langsung ke core Laravel

Yang mana repository sebelumnya yang dimaksud adalah https://github.com/elabs/pundit, salah satu Gem untuk Ruby on Rails.

Selagi menjawab pertanyaan di group, saya menemukan beberapa hal yang belum pernah saya lihat sebelumnya di dokumentasi, seperti @show. Setelah itu saya mampir source code di GitHub, dan menemukan commit @can. Setelah melihat source code @can, saya sempat bingung dengan facade bernama Gate yang belum pernah saya lihat sebelumnya. Setelah membaca commit, saya menemukan hal yang menarik disini https://github.com/laravel/framework/commit/9a5189822bba546f33a550752b57161e9689c6cd

Ternyata saya sedang menggunakan versi dimana fitur ACL ini sudah bisa dinikmati, yaitu versi 5.1.12. So, bagaimana kira-kira cara menggunakan ACL di Laravel ini?

Hmm, artikel Part #1 ini ditujukan untuk existing project. Yang project-nya menggunakan Laravel versi sebelum 5.1.12. Untuk project baru, bisa langsung skip ke PART #2. Btw, Part #2 belum dibuat. Ini dulu yaa saya publish 😐

Upgrade ke versi 5.1.12

Pertama jalankan dulu composer update laravel/framework atau untuk update semua package termasuk non-Laravel composer udpate.

Config

Setelah itu buka config/app.php, tambahkan ini di aliases

'Gate' => IlluminateSupportFacadesGate::class,

Controller

Pada app/Http/Controllers/Controller.php tambahkan trait ini

use AuthorizesRequests;

jangan lupa di-import

use IlluminateFoundationAuthAccessAuthorizesRequests;

Bingung? Detailnya bisa dilihat disini https://github.com/laravel/laravel/commit/c82c5eceda363db1dde8bf9a8a9b1da7b316307f

Model

Di app/User.php import dua class ini

use IlluminateFoundationAuthAccessAuthorizable;
use IlluminateContractsAuthAccessAuthorizable as AuthorizableContract;

Tambahkan di AuthorizableContract belakang implements, sehingga menjadi seperti ini

class User extends Model implements AuthenticatableContract, AuthorizableContract, CanResetPasswordContract

Tambahkan Authorizable trait yang sudah di-import

use Authorizable;

Bingung? Silahkan lihat ini https://github.com/laravel/laravel/blob/master/app/User.php

Service Provider

Tambahkan Service Provider baru app/Providers/AuthServiceProvider.php, isinya bisa dilihat disini https://raw.githubusercontent.com/laravel/laravel/7d4b5d75efb7ec201a0eb9486963cb7bd91e323a/app/Providers/AuthServiceProvider.php

Jangan lupa di-register di config/app.php

AppProvidersAuthServiceProvider::class,

Kalau bingung bisa lihat disini https://github.com/laravel/laravel/commit/7d4b5d75efb7ec201a0eb9486963cb7bd91e323a

Done

Aha! Setup sudah selesai 😀 Tunggu PART #2 cara menggunakannya.

Update 15 menit kemudian

Ngahahaa… ternyata sudah ada di dokumentasi http://laravel.com/docs/5.1/upgrade#upgrade-5.1.11 :v Ngpain saya bikin ini? 😥 Akibat baca source code dulu baru baca dokumentasi -_-”

Aziz & Yahya Ketawa Hahahaa

Iklan

9 pemikiran pada “New Laravel 5.1 ACL – Part #1

  1. om mul, ini parameter function nya harus object ya? O.o saya coba pass string ngga bisa haha expect parameter to be object….

    akhirnya filter di middleware aja malah cepet =_= check di controller atau view tinggal Auth::user()->role

  2. Saya sudah ambil dr github mas, cuma ketika di serve. Ada pesan error di tampilannya “SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘acl-laravel.permissions’ doesn’t exist (SQL: select * from `permissions`)”
    Maaf newbie saya mas ..

Tinggalkan Balasan

Please log in using one of these methods to post your comment:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s