Membuat Security & Credential di Symfony


memberi hak akses web page
memberi hak akses web page saat LOGIN user

Bagian ketiga dari penggunaan session pada symfony adalah untuk kepentingan hak akses user, atau sering disebut user security. Dalam hal ini setiap user yang akan mengakses aplikasi web tersebut, akan diberikan credential tertentu, sesuai dengan kegunaan/fasilitas yang akan didapatkan user tersebut.

Umumnya kita hanya mengenal penggunaan session pada pembuatan fitur login. Padahal itu hanya salah satunya saja, dan masih banyak lagi kegunaan lainnya.

Credential digunakan untuk membatasi halaman web tertentu, sehingga hanya bisa diakses oleh user yang telah diberi hak akses oleh sistem. Kapan Hak Akses diberikan kepada user? logikanya adalah ketika user itu berhasil login (mendapat authentication). So, kesimpulannya ada 2 hal yang harus kita lakukan dalam hal security hak akses,

  1. Menandai Halaman/Pages web yang dibatasi hak aksesnya.
  2. Memberikan hak akses kepada user, agar bisa masuk ke halaman yang diinginkan.

Untuk bisa melakukan hal tersebut, mungkin kita sering menggunakan cara klasik. Misalnya dengan melakukan pengecekan disetiap halaman (atau header page), apakar user session yang telah login berhak masuk ke halaman tersebut. Cara ini sangat tidak efisien dan membingungkan, terutama jika pages pada aplikasi kita sudah sangat banyak.

dengan symfony, Anda tidak perlu membuat algoritma pengecekan dan redirect yang rumit, untuk membatasi hak akses user. Cukup melakukan settingan dasar untuk security, dan memberikan hak akses (session) saat user berhasil login.

Ayo kita coba, ikuti 3 step mudah ini.

1. modifikasi setting.yml, untuk men-setting halaman default jika user belum login (belum mendapat hak akses). cara nya mudah, silahkan bukan file setting.yml yang ada pada application Anda. misal, apps/backend/config/setting.yml. kemudian tambahkan script berikut (perhatikan posisi dan urutan penulisan)

all:
  .actions:
    login_module:  login
    login_action:  loginform

    secure_module: login
    secure_action: secure

Perhatikan penulisan “spasi” pada file YML, jika tidak sesuai dengan penulisan diatas maka kemungkinan akan terjadi kesalahan. Asumsi konfigurasi login_module diatas, kita punya module login yang isi action nya ada loginform (ini tampilan login). Sedangkan konfigurasi secure_module digunakan untuk tampilan user yang tidak memiliki hak akses.

2. modifikasi security.yml, untuk menandai halaman-halaman yang dibatasi hak aksesnya. Cara nya juga mudah, konfigurasi dapat kita lakukan langsung dilevel apps atau dilevel module. misal, kita akan coba melakukan konfigurasi pembatasan akses page(action) pada level module. Silahkan dibuat didalam modules/belanja/config/security.yml. Ikuti script berikut,

read:
  is_secure:   false       # All users can request the read action

update:
  is_secure:   true        # The update action is only for authenticated users

delete:
  is_secure:   true        # Only for authenticated users
  credentials: admin       # With the admin credential

Pada contoh diatas, kita punya action read, update dan delete dengan masing-masing settingan security yang berbeda. Dan pada Action delete hanya bisa dieksekusi jika credential yang sedang aktif adalah admin. Kita juga bisa membuat modifikasi tingkat lanjut dari penulisan credentials, menjadi seperti berikut ini,

editArticle:
  credentials: [ admin, editor ]              # admin AND editor

publishArticle:
  credentials: [ admin, publisher ]           # admin AND publisher

userManagement:
  credentials: [[ admin, superuser ]]         # admin OR superuser

Artinya, kita ingin Action “editArticle” hanya bisa diakses oleh user dengan credential “admin” dan “editor”. kita ingin Action “userManagement” hanya bisa diakses oleh “admin” atau oleh “superuser”.

Ingat!! perhatikan penggunaan “spasi” pada file YML.

3. berikan Authentification dan Credential pada user yang berhasil login.

Sudah dapat ditebak, kita memberkan Hak Akses kepada user berupa Authentification (penanda) dan Credentials (jabatannya). Ini dilakukan di action.class, ketika user telah berhasil login. Caranya sangat mudah, cukup men-setting Authentication menjadi true. Misal seperti ini,

if ($request->getParameter('login_username') == 'udin')
 {
    $this->getUser()->setAuthenticated(true);
 }

kemudian berikan Credential kepada user yang sedang login itu sesuai hak nya. Misal credential di-set sebagai admin,

$this->getUser()->addCredentials('admin');

Isi Credential (admin) inilah yang kita sesuaikan dengan tahapan no.3 diatas.

sampai pada step ketiga ini kita telah berhasil melakukan settingan Security (untuk page) dan Credential (untuk user).

 

Selamat Mencoba,

dan bersiaplah kecewa.. karena ternyata cara seperti ini sangat Guammpangg!! 😀

 


Leave a Reply

Your email address will not be published. Required fields are marked *