diff --git a/app/Auth.php b/app/Auth.php
new file mode 100644
index 0000000000000000000000000000000000000000..9cd773fbdc2d2a6d49e867e59c75fed357399c85
--- /dev/null
+++ b/app/Auth.php
@@ -0,0 +1,38 @@
+<?php
+
+namespace App;
+
+use Illuminate\Support\Facades\Auth as BaseAuth;
+
+class Auth extends BaseAuth
+{
+    public static function isCommonUser()
+    {
+        $user = self::user();
+        if ($user && ($user->role == User::ROLE_USER)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public static function isAdmin()
+    {
+        $user = self::user();
+        if ($user && ($user->role == User::ROLE_ADMIN)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+
+    public static function isPencatat()
+    {
+        $user = self::user();
+        if ($user && ($user->role == User::ROLE_PENCATAT)) {
+            return true;
+        } else {
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Core/AdminController.php b/app/Http/Controllers/Core/AdminController.php
new file mode 100644
index 0000000000000000000000000000000000000000..90cd00d5961d44c263489fc6b09a8358d6a7d6dc
--- /dev/null
+++ b/app/Http/Controllers/Core/AdminController.php
@@ -0,0 +1,27 @@
+<?php
+
+namespace App\Http\Controllers\Core;
+
+use App\Http\Controllers\Controller;
+use App\User;
+use Illuminate\Http\Request;
+
+class AdminController extends Controller
+{
+    public function authenticate(Request $request)
+    {
+        if (!$request->session()->has('user.id') || ($request->session()->get('user.role') != User::ROLE_ADMIN)) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    protected function user(Request $request)
+    {
+        $userId = $request->session()->get('user.id');
+        $user = User::find($userId);
+        
+        return $user;
+    }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Core/CommonUserController.php b/app/Http/Controllers/Core/CommonUserController.php
new file mode 100644
index 0000000000000000000000000000000000000000..5df0c7e2868b85a89fa8682ce2cf43a013b8ce2d
--- /dev/null
+++ b/app/Http/Controllers/Core/CommonUserController.php
@@ -0,0 +1,28 @@
+<?php
+
+namespace App\Http\Controllers\Core;
+
+use App\Http\Controllers\Controller;
+use App\User;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Redirect;
+
+class CommonUserController extends Controller
+{
+    public function authenticate(Request $request)
+    {
+        if (($request->session()->has('user.id') == NULL) || ($request->session()->get('user.role') != User::ROLE_USER)) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    protected function user(Request $request)
+    {
+        $userId = $request->session()->get('user.id');
+        $user = User::find($userId);
+
+        return $user;
+    }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Core/GuestController.php b/app/Http/Controllers/Core/GuestController.php
new file mode 100644
index 0000000000000000000000000000000000000000..8ec7bc71ad17dcbc9d523a90094d4a710d0c92f4
--- /dev/null
+++ b/app/Http/Controllers/Core/GuestController.php
@@ -0,0 +1,33 @@
+<?php
+
+namespace App\Http\Controllers\Core;
+
+use App\Http\Controllers\Controller;
+use App\User;
+use Illuminate\Http\Request;
+
+class GuestController extends Controller
+{
+    public function authenticate(Request $request)
+    {
+        if ($request->session()->has('user.id')) {
+            $role = $request->session()->get('user.role', NULL);
+
+            if ($role == User::ROLE_USER) {
+                redirect('/permohonan');
+            } else if ($role == User::ROLE_PENCATAT) {
+                redirect('/pencatat/permohonan');
+            } else if ($role == User::ROLE_ADMIN) {
+
+            }
+        }
+    }
+
+    protected function user(Request $request)
+    {
+        $userId = $request->session()->get('user.id');
+        $user = User::find($userId);
+
+        return $user;
+    }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/Core/PencatatController.php b/app/Http/Controllers/Core/PencatatController.php
new file mode 100644
index 0000000000000000000000000000000000000000..4432186ea62162b342b385f5c178269adc535efb
--- /dev/null
+++ b/app/Http/Controllers/Core/PencatatController.php
@@ -0,0 +1,19 @@
+<?php
+
+namespace App\Http\Controllers\Core;
+
+use App\Http\Controllers\Controller;
+use App\User;
+use Illuminate\Http\Request;
+
+class PencatatController extends Controller
+{
+    public function authenticate(Request $request)
+    {
+        if (!$request->session()->has('user.id') || ($request->session()->get('user.role') != User::ROLE_PENCATAT)) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php
index c1fd85c00d0653d9bc0adb5ca46417825710d84d..330c1b5f2dc5e1774d5136ecdb4b3e330a568b43 100644
--- a/app/Http/Controllers/HomeController.php
+++ b/app/Http/Controllers/HomeController.php
@@ -2,42 +2,71 @@
 
 namespace App\Http\Controllers;
 
+use App\Http\Controllers\Core\GuestController;
 use App\Http\Requests;
+use App\Services\UserService;
 use App\User;
 use Illuminate\Http\Request;
 
-class HomeController extends Controller
+class HomeController extends GuestController
 {
-    /**
-     * Create a new controller instance.
-     *
-     * @return void
-     */
-    public function __construct()
-    {
+    private $userService;
 
+    public function __construct(Request $request)
+    {
+        $this->userService = new UserService();
     }
 
-    /**
-     * Show the application dashboard.
-     *
-     * @return \Illuminate\Http\Response
-     */
-    public function index()
+    public function index(Request $request)
     {
+        $this->authenticate($request);
         return redirect('/');
     }
     
     public function postRegister(Request $request)
     {
+        $this->authenticate($request);
+
         $email = $request->input('email');
         $password = $request->input('password');
         
         User::create([
             'email' => $email,
-            'password' => bcrypt($password)
+            'password' => md5($password)
         ]);
         
         return redirect()->action('Auth\AuthController@login');
     }
+
+    public function login(Request $request)
+    {
+        $this->authenticate($request);
+
+        return view('auth.login');
+    }
+
+    public function postLogin(Request $request)
+    {
+        $this->authenticate($request);
+
+        $email = $request->input('email');
+        $password = $request->input('password');
+        
+        $user = $this->userService->validate($email, $password);
+        if ($user) {
+            $request->session()->put('user.id', $user->id);
+            $request->session()->put('user.email', $user->email);
+            $request->session()->put('user.role', $user->role);
+
+            if ($user->role == User::ROLE_USER) {
+                return redirect()->action('PermohonanController@index');
+            } else if ($user->role == User::ROLE_PENCATAT) {
+                return redirect()->action('Pencatat\PermohonanController@index');
+            } else if ($user->role == User::ROLE_ADMIN) {
+
+            }
+        } else {
+            return redirect()->action('Auth\AuthController@login');
+        }
+    }
 }
diff --git a/app/Http/Controllers/admin/PermohonanController.php b/app/Http/Controllers/Pencatat/PermohonanController.php
similarity index 50%
rename from app/Http/Controllers/admin/PermohonanController.php
rename to app/Http/Controllers/Pencatat/PermohonanController.php
index dbbd00ee534d7994d97bdc5d28e125d89d4e89f5..b3693a0bc2a8aadba2d5c06649884d0d4a7a1d88 100644
--- a/app/Http/Controllers/admin/PermohonanController.php
+++ b/app/Http/Controllers/Pencatat/PermohonanController.php
@@ -1,21 +1,24 @@
 <?php
 
-namespace App\Http\Controllers\Admin;
+namespace App\Http\Controllers\Pencatat;
 
-use App\Http\Controllers\Controller;
+use App\Auth;
+use App\Http\Controllers\Core\PencatatController;
 use App\Models\Permohonan;
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
 
-class PermohonanController extends Controller
+class PermohonanController extends PencatatController
 {
-    public function __construct()
+    public function __construct(Request $request)
     {
-        
     }
     
-    public function index()
+    public function index(Request $request)
     {
+        if (!$this->authenticate($request)) {
+            return redirect()->action('HomeController@login');
+        }
+
         $permohonanList = Permohonan::where('status', '=', Permohonan::STATUS_PENDING)
                                     ->get();
 
@@ -26,7 +29,11 @@ class PermohonanController extends Controller
     
     public function view(Request $request, $id)
     {
-        $user = Auth::user();
+        if (!$this->authenticate($request)) {
+            return redirect()->action('HomeController@login');
+        }
+
+        $user = $this->user($request);
         $permohonan = $user->permohonan;
         
         return view('admin.permohonan.view', [
diff --git a/app/Http/Controllers/PermohonanController.php b/app/Http/Controllers/PermohonanController.php
index ff84b8e64217a721aa1a530dd1d026e0763b0747..21067e5543f0c1bbbf092b550e29c7ffdc02962e 100644
--- a/app/Http/Controllers/PermohonanController.php
+++ b/app/Http/Controllers/PermohonanController.php
@@ -2,33 +2,42 @@
 
 namespace App\Http\Controllers;
 
+use App\Auth;
+use App\Http\Controllers\Core\CommonUserController;
 use App\Models\Permohonan;
 use App\Services\PermohonanService;
 use Illuminate\Http\Request;
-use Illuminate\Support\Facades\Auth;
 use Validator;
 
-class PermohonanController extends Controller
+class PermohonanController extends CommonUserController
 {
     private $permohonanService;
 
-    public function __construct()
+    public function __construct(Request $request)
     {
         $this->permohonanService = new PermohonanService();
     }
     
-    public function index()
+    public function index(Request $request)
     {
-        $user = Auth::user();
+        if (!$this->authenticate($request)) {
+            return redirect()->action('HomeController@login');
+        }
+
+        $user = $this->user($request);
         
         return view('permohonan.index', [
             'permohonan' => $user->permohonan
         ]);
     }
     
-    public function create()
+    public function create(Request $request)
     {
-        $user = Auth::user();
+        if (!$this->authenticate($request)) {
+            return redirect()->action('HomeController@login');
+        }
+
+        $user = $this->user($request);
         $this->permohonanService->createPermohonan($user);
         
         return redirect()->action('PermohonanController@update');
@@ -36,7 +45,11 @@ class PermohonanController extends Controller
     
     public function update(Request $request)
     {
-        $user = Auth::user();
+        if (!$this->authenticate($request)) {
+            return redirect()->action('HomeController@login');
+        }
+
+        $user = $this->user($request);
         if ($this->permohonanService->userHavePermohonan($user)) {
             $permohonan = $user->permohonan;
 
@@ -57,7 +70,11 @@ class PermohonanController extends Controller
     
     public function postUpdate(Request $request)
     {
-        $user = Auth::user();
+        if (!$this->authenticate($request)) {
+            return redirect()->action('HomeController@login');
+        }
+
+        $user = $this->user($request);
 
         $rules = [
             'noKtpPria' => 'required|digits:16',
@@ -89,7 +106,11 @@ class PermohonanController extends Controller
 
     public function upload(Request $request)
     {
-        $user = Auth::user();
+        if (!$this->authenticate($request)) {
+            return redirect()->action('HomeController@login');
+        }
+
+        $user = $this->user($request);
         $permohonan = $user->permohonan;
         
         return view('permohonan.upload', [
@@ -99,7 +120,11 @@ class PermohonanController extends Controller
     
     public function postUploadRt(Request $request)
     {
-        $user = Auth::user();
+        if (!$this->authenticate($request)) {
+            return redirect()->action('HomeController@login');
+        }
+
+        $user = $this->user($request);
         $permohonan = $user->permohonan;
         $uploadPath = public_path(Permohonan::SURAT_RT_DIR);
 
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 288c92735a6013af8c798f1243c54a3f8f5c9e9c..b03a311aa4b074025b6b4a5b01281c66e933d826 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -46,6 +46,6 @@ class Kernel extends HttpKernel
         'auth' => \App\Http\Middleware\Authenticate::class,
         'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
         'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
-        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
+        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class
     ];
 }
diff --git a/app/Http/routes.php b/app/Http/routes.php
index b7425fa39de9daf995a6ee7d778ed3e8e971ed95..1c1622af6b8d67843d7c32a5ce8bd9ac10b7e513 100644
--- a/app/Http/routes.php
+++ b/app/Http/routes.php
@@ -11,13 +11,7 @@
 |
 */
 
-Route::get('/', function () {
-    return view('welcome');
-});
-
 Route::group(['middleware' => ['web']], function () {
-    Route::get('/login', 'HomeController@login');
-
     Route::post('/login', 'Auth\AuthController@login');
 
     Route::get('/logout', 'Auth\AuthController@logout');
@@ -30,7 +24,11 @@ Route::group(['middleware' => ['web']], function () {
 
     Route::get('/home', 'HomeController@index');
 
-    Route::group(['middleware' => ['auth']], function () {
+    Route::get('/login', 'HomeController@login');
+
+    Route::post('/login', 'HomeController@postLogin');
+
+//    Route::group(['middleware' => ['commonUser']], function () {
         Route::get('/', 'PermohonanController@index');
         
         Route::get('/permohonan/create', 'PermohonanController@create');
@@ -44,9 +42,15 @@ Route::group(['middleware' => ['web']], function () {
         Route::post('/permohonan/upload/rt', 'PermohonanController@postUploadRt');
 
         Route::post('/permohonan/upload/rw', 'PermohonanController@postUploadRw');
-        
-        Route::get('/admin', 'Admin\PermohonanController@index');
-        
-        Route::get('/admin/permohonan/{id}', 'Admin\PermohonanController@view');
-    });
+//    });
+
+//    Route::group(['middleware' => ['pencatat']], function () {
+        Route::get('/pencatat', 'Pencatat\PermohonanController@index');
+
+        Route::get('/pencatat/permohonan/{id}', 'Pencatat\PermohonanController@view');
+//    });
+
+//    Route::group(['middleware' => ['admin']], function () {
+
+//    });
 });
\ No newline at end of file
diff --git a/app/Services/UserService.php b/app/Services/UserService.php
new file mode 100644
index 0000000000000000000000000000000000000000..f6f4889fe31e111ab89886ef892d87ad39b96f4e
--- /dev/null
+++ b/app/Services/UserService.php
@@ -0,0 +1,25 @@
+<?php
+
+namespace App\Services;
+
+use App\User;
+
+class UserService
+{
+    public function __construct()
+    {
+    }
+
+    public function validate($email, $password)
+    {
+        $user = User::where('email', $email)
+                    ->where('password', md5($password))
+                    ->first();
+
+        if ($user != NULL) {
+            return $user;
+        } else {
+            return false;
+        }
+    }
+}
\ No newline at end of file
diff --git a/app/User.php b/app/User.php
index 9bf28d15aa6fe96514d89f5a6103f57d75f5bf5a..987b427becb5f339b558edabb8dc201e4acdaff5 100644
--- a/app/User.php
+++ b/app/User.php
@@ -7,6 +7,10 @@ use Illuminate\Foundation\Auth\User as Authenticatable;
 
 class User extends Authenticatable
 {
+    const ROLE_USER = 0;
+    const ROLE_PENCATAT = 1;
+    const ROLE_ADMIN = 2;
+
     protected $table = 'users';
 
     public $timestamps = false;
diff --git a/resources/views/layouts/admin_layout.blade.php b/resources/views/layouts/admin_layout.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php
index 6308850ec704f612f92bbc4973cd0c01bdb28afd..8f0cba716349cbc19142be8df946818f262f628b 100644
--- a/resources/views/layouts/base.blade.php
+++ b/resources/views/layouts/base.blade.php
@@ -243,12 +243,7 @@
                       <li class="hidden-folded m-t text-dark-grey text-xs padder-md padder-v-sm">
                           <span>Navigation</span>
                       </li>
-                      <li class="active">
-                        <a href="/" class="text-dark-grey" >
-                            <i class="icon-bdg_dashboard icon-grey"></i>
-                            <span class="font-bold">Dashboard</span>
-                        </a>
-                      </li>
+                      @yield('menu')
 
                       {{--<li class="line1 dg"></li>--}}
 
diff --git a/resources/views/layouts/pencatat_layout.blade.php b/resources/views/layouts/pencatat_layout.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/resources/views/layouts/user_layout.blade.php b/resources/views/layouts/user_layout.blade.php
new file mode 100644
index 0000000000000000000000000000000000000000..14c6e09a861bde31cbba82f68335f2dfdca413d9
--- /dev/null
+++ b/resources/views/layouts/user_layout.blade.php
@@ -0,0 +1,10 @@
+@extends('layouts.base')
+
+@section('menu')
+  <li class="active">
+    <a href="/" class="text-dark-grey" >
+      <i class="icon-bdg_dashboard icon-grey"></i>
+      <span class="font-bold">Dashboard</span>
+    </a>
+  </li>
+@endsection
\ No newline at end of file
diff --git a/resources/views/permohonan/index.blade.php b/resources/views/permohonan/index.blade.php
index 8b0be34aaede096d5e1ee91bf103b75f47688ba7..9d1fa43b5f4b5beb01ecdb8b111d3fa2c337b041 100644
--- a/resources/views/permohonan/index.blade.php
+++ b/resources/views/permohonan/index.blade.php
@@ -1,4 +1,4 @@
-@extends('layouts.base')
+@extends('layouts.user_layout')
 
 @section('title')
   Permohonan Pengajuan Catatan Perkawinan
diff --git a/resources/views/permohonan/update.blade.php b/resources/views/permohonan/update.blade.php
index d75264b658405c19d67c0b52346ac22d2c26c499..cb46debcb5027a0d661c42343412dfee9c199e8d 100644
--- a/resources/views/permohonan/update.blade.php
+++ b/resources/views/permohonan/update.blade.php
@@ -1,4 +1,4 @@
-@extends('layouts.base')
+@extends('layouts.user_layout')
 
 @section('title')
   Permohonan Pengajuan Catatan Perkawinan
diff --git a/resources/views/permohonan/upload.blade.php b/resources/views/permohonan/upload.blade.php
index e491fcb3668e26dc46f6625d822e5dbbc1503e60..374f48483235b14cad16df3ac62fbf5265771756 100644
--- a/resources/views/permohonan/upload.blade.php
+++ b/resources/views/permohonan/upload.blade.php
@@ -1,4 +1,4 @@
-@extends('layouts.base')
+@extends('layouts.user_layout')
 
 @section('title')
   Unggah Surat Rekomendasi RT/RW