From 3e08354dd3b2be98142a26c96f249071d7228ee1 Mon Sep 17 00:00:00 2001
From: Vincent The <vincent.s.the@gmail.com>
Date: Sun, 17 Apr 2016 19:15:21 +0700
Subject: [PATCH] change authentication method, FINALLLLYYYY

---
 app/Auth.php                                  | 38 ++++++++++++
 app/Http/Controllers/Core/AdminController.php | 27 +++++++++
 .../Controllers/Core/CommonUserController.php | 28 +++++++++
 app/Http/Controllers/Core/GuestController.php | 33 +++++++++++
 .../Controllers/Core/PencatatController.php   | 19 ++++++
 app/Http/Controllers/HomeController.php       | 59 ++++++++++++++-----
 .../PermohonanController.php                  | 23 +++++---
 app/Http/Controllers/PermohonanController.php | 47 +++++++++++----
 app/Http/Kernel.php                           |  2 +-
 app/Http/routes.php                           | 28 +++++----
 app/Services/UserService.php                  | 25 ++++++++
 app/User.php                                  |  4 ++
 .../views/layouts/admin_layout.blade.php      |  0
 resources/views/layouts/base.blade.php        |  7 +--
 .../views/layouts/pencatat_layout.blade.php   |  0
 resources/views/layouts/user_layout.blade.php | 10 ++++
 resources/views/permohonan/index.blade.php    |  2 +-
 resources/views/permohonan/update.blade.php   |  2 +-
 resources/views/permohonan/upload.blade.php   |  2 +-
 19 files changed, 300 insertions(+), 56 deletions(-)
 create mode 100644 app/Auth.php
 create mode 100644 app/Http/Controllers/Core/AdminController.php
 create mode 100644 app/Http/Controllers/Core/CommonUserController.php
 create mode 100644 app/Http/Controllers/Core/GuestController.php
 create mode 100644 app/Http/Controllers/Core/PencatatController.php
 rename app/Http/Controllers/{admin => Pencatat}/PermohonanController.php (50%)
 create mode 100644 app/Services/UserService.php
 create mode 100644 resources/views/layouts/admin_layout.blade.php
 create mode 100644 resources/views/layouts/pencatat_layout.blade.php
 create mode 100644 resources/views/layouts/user_layout.blade.php

diff --git a/app/Auth.php b/app/Auth.php
new file mode 100644
index 0000000..9cd773f
--- /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 0000000..90cd00d
--- /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 0000000..5df0c7e
--- /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 0000000..8ec7bc7
--- /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 0000000..4432186
--- /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 c1fd85c..330c1b5 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 dbbd00e..b3693a0 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 ff84b8e..21067e5 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 288c927..b03a311 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 b7425fa..1c1622a 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 0000000..f6f4889
--- /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 9bf28d1..987b427 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 0000000..e69de29
diff --git a/resources/views/layouts/base.blade.php b/resources/views/layouts/base.blade.php
index 6308850..8f0cba7 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 0000000..e69de29
diff --git a/resources/views/layouts/user_layout.blade.php b/resources/views/layouts/user_layout.blade.php
new file mode 100644
index 0000000..14c6e09
--- /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 8b0be34..9d1fa43 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 d75264b..cb46deb 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 e491fcb..374f484 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
-- 
GitLab