diff --git a/app/Http/Controllers/Admins/DashboardController.php b/app/Http/Controllers/Admins/DashboardController.php new file mode 100644 index 0000000..b339bdb --- /dev/null +++ b/app/Http/Controllers/Admins/DashboardController.php @@ -0,0 +1,17 @@ +paginate(10); - return view('pages.admins.users.index', compact('users')); + return view('pages.admin.users.index', compact('users')); } /** @@ -33,7 +33,7 @@ class UserController extends Controller $roles = Role::latest()->get(); // call view users.create - return view('pages.admins.users.create', compact('roles')); + return view('pages.admin.users.create', compact('roles')); } /** @@ -94,7 +94,7 @@ class UserController extends Controller $roles = Role::latest()->get(); // call view pages - return view('pages.admins.users.edit', compact('user', 'roles')); + return view('pages.admin.users.edit', compact('user', 'roles')); } /** diff --git a/app/Http/Controllers/Auths/AuthController.php b/app/Http/Controllers/Auths/AuthController.php index 4474129..71a0cee 100644 --- a/app/Http/Controllers/Auths/AuthController.php +++ b/app/Http/Controllers/Auths/AuthController.php @@ -107,7 +107,7 @@ class AuthController extends Controller 'msg' => 'Anda berhasil melakukan Login!' ]); - return redirect()->intended('/transaksi'); + return Redirect::to($this->redirectTo()); } // Create Session message @@ -130,6 +130,23 @@ class AuthController extends Controller } } + public function redirectTo() + { + $role = Auth::user()->role; + switch ($role[0]->name) { + case 'Admin': + return '/dashboard'; + break; + case 'Kasir': + return '/transaksi'; + break; + + default: + return '/transaksi'; + break; + } + } + /** * Logout and back to form login */ diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 6bd7139..18a763c 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -65,7 +65,7 @@ class Kernel extends HttpKernel 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, 'role' => \Spatie\Permission\Middleware\RoleMiddleware::class, - 'permission' => \Spatie\Permission\Middleware\PermissionMiddleware::class, + 'permission' => \App\Http\Middleware\PermissionMiddleware::class, 'role_or_permission' => \Spatie\Permission\Middleware\RoleOrPermissionMiddleware::class, ]; } diff --git a/app/Http/Middleware/PermissionMiddleware.php b/app/Http/Middleware/PermissionMiddleware.php new file mode 100644 index 0000000..3664aa7 --- /dev/null +++ b/app/Http/Middleware/PermissionMiddleware.php @@ -0,0 +1,48 @@ +guard($guard); + + if ($authGuard->guest()) { + throw UnauthorizedException::notLoggedIn(); + } + + if (!is_null($permission)) { + $permissions = is_array($permission) + ? $permission + : explode('|', $permission); + } + + if (is_null($permission)) { + $permission = $request->route()->getName(); + + $permissions = array($permission); + } + + + foreach ($permissions as $permission) { + if ($authGuard->user()->can($permission)) { + return $next($request); + } + } + + throw UnauthorizedException::forPermissions($permissions); + } +} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index afc78c4..c27babb 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -21,7 +21,20 @@ class RedirectIfAuthenticated foreach ($guards as $guard) { if (Auth::guard($guard)->check()) { - return redirect(RouteServiceProvider::HOME); + // return redirect(RouteServiceProvider::HOME); + $role = Auth::user()->role; + switch ($role[0]->name) { + case 'Admin': + return '/dashboard'; + break; + case 'Kasir': + return '/transaksi'; + break; + + default: + return '/transaksi'; + break; + } } } diff --git a/app/Models/User.php b/app/Models/User.php index 0ee52f6..99cad69 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens; +use Spatie\Permission\Models\Role; use Spatie\Permission\Traits\HasRoles; class User extends Authenticatable @@ -43,4 +44,17 @@ class User extends Authenticatable 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $guard_name = 'web'; + + // role + public function role() + { + return $this->belongsToMany(Role::class, 'model_has_roles', 'model_id', 'role_id'); + } } diff --git a/database/migrations/2024_01_24_163537_add_desc_in_permission_tables.php b/database/migrations/2024_01_24_163537_add_desc_in_permission_tables.php new file mode 100644 index 0000000..2dee61a --- /dev/null +++ b/database/migrations/2024_01_24_163537_add_desc_in_permission_tables.php @@ -0,0 +1,30 @@ +string('group_name'); // For MySQL 8.0 use string('guard_name', 125); + $table->string('desc'); // For MySQL 8.0 use string('guard_name', 125); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('permissions', function (Blueprint $table) { + $table->dropColumn('group_name'); + $table->dropColumn('desc'); + }); + } +}; diff --git a/resources/views/components/navbar.blade.php b/resources/views/components/navbar.blade.php index 20e7e8e..8c6b8b5 100644 --- a/resources/views/components/navbar.blade.php +++ b/resources/views/components/navbar.blade.php @@ -1,90 +1,68 @@