Artikel ini dirunut berdasarkan Jobeet Tutorial, yang dibuat oleh Fabien Potencier, untuk Symfony 1.4.
Keamanan aplikasi
Kemanan merupakan proses untuk mencegah user agar tidak mengakses halaman yang bukan menjadi haknya. Prosesnya terdiri dari dua langkah, pertama authentifikasi merupakan proses yang akan meminta user untuk memasukan identitas singkat sehingga sistem dapat mengetahui apakah user tersebut berhak untuk mengakses atau tidak. Autorisasi merupkan proses pemberian daftar hak akses oleh sistem berdasarkan status user. Untuk mengamankan aplikasi kita, ubah file security.yml yang ada di folder app/config menjadi seperti berikut ini:app/config/security.yml
security:
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
default_target_path: ibw_jobeet_homepage
access_control:
- { path: ^/admin, roles: ROLE_ADMIN }
providers:
in_memory:
memory:
users:
admin: { password: adminpass, roles: 'ROLE_ADMIN' }
encoders:
Symfony\Component\Security\Core\User\User: plaintext
============================================
Konfigurasi di atas akan mengamankan bagian aplikasi yang memiliki route /admin. Dengan begitu user yang akan mengakses halaman aplikasi dengan route /admin akan diminta username dan passwordnya.
Untuk proses authentifikasi kita harus membuat halaman form untuk login. Yuk kita mulai, pertama kita tambahkan routing login di confignya:
src/Ibw/JobeetBundle/Resources/config/routing.yml
login:
pattern: /login
defaults: { _controller: IbwJobeetBundle:Default:login }
login_check:
pattern: /login_check
# ...
======================================
Selanjutnya kita akan membuat method di DefaultController untuk mengakomodir proses authentifikasinya:
src/Ibw/JobeetBundle/Controller/DefaultController.php
namespace Ibw\JobeetBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\SecurityContext;
class DefaultController extends Controller
{
// ...
public function loginAction()
{
$request = $this->getRequest();
$session = $request->getSession();
// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR)) {
$error = $request->attributes->get(SecurityContext::AUTHENTICATION_ERROR);
} else {
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return $this->render('IbwJobeetBundle:Default:login.html.twig', array(
// last username entered by the user
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error,
));
}
}
==========================================
Tugas kita selanjutnya adalah membuata form untuk login.
src/Ibw/JobeetBundle/Resources/views/Default/login.html.twig
{% if error %}
<div>{{ error.message }}</div>
{% endif %}
<form action="{{ path('login_check') }}" method="post">
<label for="username">Username:</label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Password:</label>
<input type="password" id="password" name="_password" />
<button type="submit">login</button>
</form>
==============================================
Sekarang jika kita mengakses halaman localhost/sandbox/app_dev.php/admin maka secara otomatis akan diarahkan ke form login jika user belum login sebelumnya.
No comments:
Post a Comment