diff --git a/app/Http/Controllers/AdminDashboardController.php b/app/Http/Controllers/AdminDashboardController.php
deleted file mode 100644
index d287d2016acfa76ce221d78f6171107b081167b6..0000000000000000000000000000000000000000
--- a/app/Http/Controllers/AdminDashboardController.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-
-namespace App\Http\Controllers;
-
-use Illuminate\Http\Request;
-
-use App\Http\Requests;
-
-class AdminDashboardController extends Controller
-{
-    public function index()
-    {
-      return 'Admin';
-    }
-}
diff --git a/app/Http/Controllers/ScheduleController.php b/app/Http/Controllers/ScheduleController.php
index f21761eb77bf346b444a6eb3a3be0fd9d18ef438..953e9f7865ffe3be6cd62623f0fa2ab57794f733 100644
--- a/app/Http/Controllers/ScheduleController.php
+++ b/app/Http/Controllers/ScheduleController.php
@@ -8,6 +8,12 @@ use App\Http\Requests;
 
 class ScheduleController extends Controller
 {
+    public function __construct()
+    {
+        $this->middleware('auth');
+        $this->middleware('scheduler');        
+    }
+    
     public function index()
     {
         return Schedule::all();
@@ -48,3 +54,4 @@ class ScheduleController extends Controller
         Schedule::find($id)->delete();
         return Schedule::all();
     }
+}
\ No newline at end of file
diff --git a/app/Http/Controllers/TpsController.php b/app/Http/Controllers/TpsController.php
index 436e9bc1e277515fb241922d23af3e3672c64cfb..afe211cb181277300f360f2deda8fdb195273eef 100644
--- a/app/Http/Controllers/TpsController.php
+++ b/app/Http/Controllers/TpsController.php
@@ -8,6 +8,12 @@ use App\Http\Requests;
 
 class TpsController extends Controller
 {
+    public function __construct()
+    {
+        $this->middleware('auth');
+        $this->middleware('manager');
+    }
+    
     public function index()
     {
         return Tps::all();
diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php
index fe4904f60b90a1e5a41da40016d5a8a22159f478..b7097e8e76e8b3d9a37e945e4dec941a9b887222 100644
--- a/app/Http/Controllers/UserController.php
+++ b/app/Http/Controllers/UserController.php
@@ -8,6 +8,12 @@ use App\Http\Requests;
 
 class UserController extends Controller
 {
+    public function __construct()
+    {
+        $this->middleware('auth');
+        $this->middleware('user');
+    }
+    
     public function index()
     {
         return User::all();
diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php
index 3efdcaa3e4e1b3b94543037ef62ce9857a8797a8..1a7967180260757238b72837318357808d0256de 100644
--- a/app/Http/Kernel.php
+++ b/app/Http/Kernel.php
@@ -48,6 +48,8 @@ class Kernel extends HttpKernel
         'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
         'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
         'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
-        'permissions.required' => \App\Http\Middleware\PermissionsRequiredMiddleware::class,
+        'user' => \App\Http\Middleware\AuthorizedUser::class,
+        'manager' => \App\Http\Middleware\AuthorizedManager::class,
+        'scheduler' => \App\Http\Middleware\AuthorizedScheduler::class,
     ];
 }
diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php
index c09d7cd894bdd6e3b1f9c1071b06d1ee215c0f73..7ddc5c3a687dfcf07b8a6fbf922c589f948a3ca5 100644
--- a/app/Http/Middleware/Authenticate.php
+++ b/app/Http/Middleware/Authenticate.php
@@ -17,7 +17,6 @@ class Authenticate
      */
     public function handle($request, Closure $next, $guard = null)
     {
-        // dd($request);
         if (Auth::guard($guard)->guest()) {
             if ($request->ajax() || $request->wantsJson()) {
                 return response('Unauthorized.', 403);
diff --git a/app/Http/Middleware/AuthorizedManager.php b/app/Http/Middleware/AuthorizedManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..e4f943e0b28f38e099b7ff539507b8715ec36de3
--- /dev/null
+++ b/app/Http/Middleware/AuthorizedManager.php
@@ -0,0 +1,45 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+use Illuminate\Support\Facades\Auth;
+use App\Tps;
+
+class AuthorizedManager
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        $user = Auth::user();
+        $role = $user->role();
+        $param = $request->route()->parameters();
+        $tps_id = !$param ? null : $param['tps'];
+        $tps = Tps::find($tps_id);
+        $mgr_id = !$tps ? null : $tps->id_manager;
+
+        if (!$tps_id) 
+        {
+            if ($role == 'admin')
+            {
+                return $next($request);
+            }
+            else
+            {
+                return redirect('/')->with('error', 'Not authorized');
+            }
+        }
+        else if ($mgr_id && $user->id == $mgr_id)
+        {
+            return $next($request);
+        }
+
+        return redirect('/')->with('error', 'Not authorized');
+    }
+}
diff --git a/app/Http/Middleware/AuthorizedScheduler.php b/app/Http/Middleware/AuthorizedScheduler.php
new file mode 100644
index 0000000000000000000000000000000000000000..42d4a6ec4015a8815651ed5178d375f1b66e1597
--- /dev/null
+++ b/app/Http/Middleware/AuthorizedScheduler.php
@@ -0,0 +1,44 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+use Illuminate\Support\Facades\Auth;
+
+class AuthorizedScheduler
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        $user = Auth::user();
+        $role = $user->role();
+        $param = $request->route()->parameters();
+        $tps_id = $request->input('id_tps');
+        $tps = !$tps_id ? null : Tps::find($tps_id);
+        $mgr_id = !$tps ? null : $tps->id_manager;
+
+        if (!$tps_id)
+        {
+            if ($role == 'admin')
+            {
+                return $next($request);
+            }
+            else
+            {
+                return redirect('/')->with('error', 'Not authorized');
+            }
+        }
+        else if ($mgr_id && $user->id == $mgr_id)
+        {
+            return $next($request);
+        }
+
+        return redirect('/')->with('error', 'Not authorized');
+    }
+}
diff --git a/app/Http/Middleware/AuthorizedUser.php b/app/Http/Middleware/AuthorizedUser.php
new file mode 100644
index 0000000000000000000000000000000000000000..b19481a98df3f0266ce87f722feb3db4669d0fe3
--- /dev/null
+++ b/app/Http/Middleware/AuthorizedUser.php
@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Http\Middleware;
+
+use Closure;
+use Illuminate\Support\Facades\Auth;
+
+class AuthorizedUser
+{
+    /**
+     * Handle an incoming request.
+     *
+     * @param  \Illuminate\Http\Request  $request
+     * @param  \Closure  $next
+     * @return mixed
+     */
+    public function handle($request, Closure $next)
+    {
+        $user = Auth::user();
+        $role = $user->role();
+        $id = !$request->route()->parameters() ? null : 
+                $request->route()->parameters()['user'];
+
+        if (!$id) 
+        {
+            if ($role == 'admin')
+            {
+                return $next($request);
+            }
+            else
+            {
+                return redirect('/')->with('error', 'Not authorized');
+            }
+        }
+        else if ($user->id == $id)
+        {
+            return $next($request);
+        }
+
+        return redirect('/')->with('error', 'Not authorized');
+    }
+}
diff --git a/app/Http/Middleware/PermissionsRequiredMiddleware.php b/app/Http/Middleware/PermissionsRequiredMiddleware.php
deleted file mode 100644
index fd328f0d2000b25594bb251696c7fcecd76b6099..0000000000000000000000000000000000000000
--- a/app/Http/Middleware/PermissionsRequiredMiddleware.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-
-namespace App\Http\Middleware;
-
-use Closure;
-
-class PermissionsRequiredMiddleware
-{
-    /**
-     * Handle an incoming request.
-     *
-     * @param  \Illuminate\Http\Request  $request
-     * @param  \Closure  $next
-     * @return mixed
-     */
-    public function handle($request, Closure $next)
-    {    
-        return \Auth::user();
-        // Check if a user is logged in.
-        if (!$user = $request->user())
-        {
-            return redirect()->guest('login');
-        }
-
-        // Get the current route.
-        $route = $request->route();
-
-        // Get the current route actions.
-        $actions = $route->getAction();
-
-        // Check if we have any permissions to check the user has.
-        if (!$permissions = isset($actions['permissions']) ? $actions['permissions'] : null)
-        {    
-            // No permissions to check, allow access.
-            return abort(403);
-        }
-
-        // Fetch all of the matching user permissions.
-        $userPermissions = array_fetch($user->permissions()->whereIn('slug', (array) $permissions)->get()->toArray(), 'slug');
-
-        // Turn the permissions we require into an array.
-        $permissions = (array) $permissions;
-
-        // Check if we require all permissions, or just one.
-        if (isset($actions['permissions_require_all']))
-        {
-            // If user has EVERY permission required.
-            if (count($permissions) == count($userPermissions))
-            {    
-                // Access is granted.
-                return $next($request);
-            }
-        } else {
-            // If the user has the permission.
-            if (count($userPermissions) >= 1)
-            {
-                // Access is granted and the rest of the permissions are ignored.
-                return $next($request);
-            }
-        }
-
-        // If we reach this far, the user does not have the required permissions.
-        return abort(404);
-    }
-}
diff --git a/app/Http/routes.php b/app/Http/routes.php
index d5ef42b9f9e5aaf8a3e4009e854111c146f1f277..558ea36c5fca6e7656671021480f70a57cd0fca5 100644
--- a/app/Http/routes.php
+++ b/app/Http/routes.php
@@ -11,12 +11,12 @@
 |
 */
 
-Route::group(['middleware' => ['web', ]], function () {
+Route::group(['middleware' => 'web'], function () {
     Route::auth();
     Route::get('/', 'HomeController@index');              // homnya kan cm 1 
     Route::get('/home', 'HomeController@index');
-});
 
-Route::resource('user', 'UserController');
-Route::resource('tps', 'TpsController');
-Route::resource('schedule', 'ScheduleController');
+    Route::resource('user', 'UserController');
+    Route::resource('tps', 'TpsController');
+    Route::resource('schedule', 'ScheduleController');
+});
diff --git a/app/User.php b/app/User.php
index 3fa6df92263a27f2d03bc9c5269f376d08251933..6f4666a775923a2c5fa1a5c7717f72efa7ef3e99 100644
--- a/app/User.php
+++ b/app/User.php
@@ -24,9 +24,10 @@ class User extends Authenticatable
         'password', 'remember_token',
     ];
 
-    public function roles()
+    public function role()
     {
-        return $this->belongsTo('App\Role');
+        // $this->belongsTo('App\Role');
+        return Role::find($this->role_id)->name;
     }
 
     public function schedule()
diff --git a/database/migrations/2016_04_01_092434_create_roles_table.php b/database/migrations/2016_04_01_092434_create_roles_table.php
index 0b22c92073ff9ad6868a133ea7452c82e31c4a09..dbad67f1be16e12b40234087c52548febd99b11b 100644
--- a/database/migrations/2016_04_01_092434_create_roles_table.php
+++ b/database/migrations/2016_04_01_092434_create_roles_table.php
@@ -3,6 +3,8 @@
 use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;
 
+use App\Role;
+
 class CreateRolesTable extends Migration 
 {
     /**
diff --git a/database/migrations/2016_04_02_172129_create_schedule_table.php b/database/migrations/2016_04_02_172129_create_schedule_table.php
deleted file mode 100644
index d45e5c13abbff3e5254c0716d9b61338878b87ee..0000000000000000000000000000000000000000
--- a/database/migrations/2016_04_02_172129_create_schedule_table.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-use Illuminate\Database\Schema\Blueprint;
-use Illuminate\Database\Migrations\Migration;
-
-class CreateScheduleTable extends Migration
-{
-    /**
-     * Run the migrations.
-     *
-     * @return void
-     */
-    public function up()
-    {
-        Schema::create('schedule', function(Blueprint $table)
-        {
-            $table->increments('id');
-            $table->integer('id_tps')->unsigned();
-            $table->integer('id_user')->unsigned();
-            $table->timestamp('time');
-            $table->timestamps();
-        }); 
-    }
-
-    /**
-     * Reverse the migrations.
-     *
-     * @return void
-     */
-    public function down()
-    {
-        Schema::drop('schedule');
-    }
-}