akunCoa
Zelda Ababil 2024-01-25 12:36:37 +07:00
parent 8c50568c83
commit 44fda60efe
19 changed files with 920 additions and 75 deletions

View File

@ -0,0 +1,17 @@
<?php
namespace App\Http\Controllers\Admins;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class DashboardController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
return view('pages.admin.dashboard');
}
}

View File

@ -22,7 +22,7 @@ class UserController extends Controller
// call table user with pagination
$users = User::latest()->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'));
}
/**

View File

@ -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
*/

View File

@ -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,
];
}

View File

@ -0,0 +1,48 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Spatie\Permission\Exceptions\UnauthorizedException;
use Symfony\Component\HttpFoundation\Response;
class PermissionMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle($request, Closure $next, $permission = null, $guard = null)
{
$authGuard = app('auth')->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);
}
}

View File

@ -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;
}
}
}

View File

@ -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<string, string>
*/
protected $guard_name = 'web';
// role
public function role()
{
return $this->belongsToMany(Role::class, 'model_has_roles', 'model_id', 'role_id');
}
}

View File

@ -0,0 +1,30 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('permissions', function (Blueprint $table) {
$table->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');
});
}
};

View File

@ -1,90 +1,68 @@
<!-- Navbar -->
<nav class="main-header navbar navbar-expand-lg navbar-light navbar-warning">
<div class="container" style="display: contents">
<a href="/" class="navbar-brand">
<a href="{{ route('transaksi.index') }}" class="navbar-brand">
<span class="brand-text font-weight-bold ml-2" style="color: rgba(62, 62, 62, 0.526)">Sepiring Telur
Keriting</span>
</a>
{{-- <div class="collapse navbar-collapse order-3" id="navbarCollapse">
<div class="collapse navbar-collapse order-3" id="navbarCollapse">
<!-- Left navbar links -->
<ul class="navbar-nav">
<li class="nav-item">
<a href="index3.html" class="nav-link">Home</a>
</li>
<li class="nav-item">
<a href="#" class="nav-link">Contact</a>
</li>
@can('dashboard.index', auth()->user())
<li class="nav-item">
<a href="{{ route('dashboard.index') }}" class="nav-link">Dashboard</a>
</li>
@endcan
<li class="nav-item dropdown">
<a id="dropdownSubMenu1" href="#" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" class="nav-link dropdown-toggle">Dropdown</a>
aria-expanded="false" class="nav-link dropdown-toggle">Transaksi</a>
<ul aria-labelledby="dropdownSubMenu1" class="dropdown-menu border-0 shadow">
<li><a href="#" class="dropdown-item">Some action </a></li>
<li><a href="#" class="dropdown-item">Some other action</a></li>
<li><a href="#" class="dropdown-item">Order </a></li>
<li><a href="#" class="dropdown-item">Pengeluaran</a></li>
<li class="dropdown-divider"></li>
<!-- Level two dropdown-->
<li class="dropdown-submenu dropdown-hover">
<a id="dropdownSubMenu2" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false" class="dropdown-item dropdown-toggle">Hover
for action</a>
<ul aria-labelledby="dropdownSubMenu2" class="dropdown-menu border-0 shadow">
<li>
<a tabindex="-1" href="#" class="dropdown-item">level 2</a>
</li>
<!-- Level three dropdown-->
<li class="dropdown-submenu">
<a id="dropdownSubMenu3" href="#" role="button" data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false"
class="dropdown-item dropdown-toggle">level 2</a>
<ul aria-labelledby="dropdownSubMenu3" class="dropdown-menu border-0 shadow">
<li><a href="#" class="dropdown-item">3rd level</a></li>
<li><a href="#" class="dropdown-item">3rd level</a></li>
</ul>
</li>
<!-- End Level three -->
<li><a href="#" class="dropdown-item">level 2</a></li>
<li><a href="#" class="dropdown-item">level 2</a></li>
</ul>
</li>
<!-- End Level two -->
<li><a href="#" class="dropdown-item">Laporan</a></li>
</ul>
</li>
@canany(['users.index', 'menu.index'], auth()->user())
<li class="nav-item dropdown">
<a id="dropdownSubMenu1" href="#" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" class="nav-link dropdown-toggle">Master Data</a>
<ul aria-labelledby="dropdownSubMenu1" class="dropdown-menu border-0 shadow">
<li><a href="#" class="dropdown-item">Data Jenis Menu</a></li>
@can('menu.index', auth()->user())
<li><a href="{{ route('menu.index') }}" class="dropdown-item">Data Menu</a></li>
@endcan
@can('users.index', auth()->user())
<li class="dropdown-divider"></li>
<li><a href="{{ route('users.index') }}" class="dropdown-item">Setting User</a></li>
@endcan
</ul>
</li>
@endcanany
</ul>
<!-- SEARCH FORM -->
<form class="form-inline ml-0 ml-md-3">
<div class="input-group input-group-sm">
<input class="form-control form-control-navbar" type="search" placeholder="Search"
aria-label="Search">
<div class="input-group-append">
<button class="btn btn-navbar" type="submit">
<i class="fas fa-search"></i>
</button>
</div>
</div>
</form>
</div> --}}
</div>
<!-- Right navbar links -->
<ul class="order-1 order-md-3 navbar-nav navbar-no-expand ml-auto">
<!-- Messages Dropdown Menu -->
<li class="nav-item dropdown">
<a class="nav-link" id="transaksi @if (Request::is('transaksi')) active @endif"
href="{{ route('transaksi.index') }}" role="button">
Transaksi
</a>
</li>
@can('transaksi.index', auth()->user())
<li class="nav-item dropdown">
<a class="nav-link" id="transaksi @if (Request::is('transaksi')) active @endif"
href="{{ route('transaksi.index') }}" role="button">
Transaksi
</a>
</li>
@endcan
<!-- Notifications Dropdown Menu -->
<li class="nav-item dropdown">
<a class="nav-link @if (Request::is('history')) active @endif" id="history"
href="{{ route('history.index') }}" role="button">
History
</a>
</li>
@can('history.index', auth()->user())
<li class="nav-item dropdown">
<a class="nav-link @if (Request::is('history')) active @endif" id="history"
href="{{ route('history.index') }}" role="button">
History
</a>
</li>
@endcan
<li class="nav-item">
<a class="nav-link" id="full-screen" data-widget="control-sidebar" data-slide="true"
href="javascript:void(0)" role="button">
@ -93,7 +71,8 @@
</li>
<li class="nav-item dropdown">
<a id="dropdownSubMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"
class="nav-link" href="#">
class="nav-link row" href="#">
{{ auth()->user()->name }}
<i class="fas fa-user"></i>
</a>
<ul aria-labelledby="dropdownSubMenu1" class="dropdown-menu border-0 shadow">

View File

@ -363,7 +363,6 @@
for (var i = 1, row; row = table.rows[i]; i++) {
var id = row.getAttribute('data-id');
if (id == params) {
index = i;
}

View File

@ -0,0 +1,31 @@
@extends('layouts.base')
@section('content-header')
<div class="col-12">
<div class="container" style="display: contents">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0"> Dashboard</h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item active">Dashboard</li>
</ol>
</div>
</div>
</div>
</div>
@endsection
@section('content')
<div class="col-12 mt-2">
<div class="container" style="display: contents">
<div class="card">
<div class="card bg-warning" style="min-height:5px; border-radius:1px;"></div>
<div class="card-body">
</div>
</div>
</div>
</div>
@endsection

View File

@ -0,0 +1,128 @@
@extends('layouts.app')
@section('title', 'Tambah Roles Akses')
@section('content')
<!-- Breadcrumb -->
<div class="card bg-info-subtle shadow-none position-relative overflow-hidden mb-4">
<div class="card-body px-4 py-3">
<div class="row align-items-center">
<div class="col-9">
<h4 class="fw-semibold mb-8">Tambah Roles & Permission</h4>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item" aria-current="page">
<a href="{{ URL::to('admin/roles') }}" class="badge text-bg-light text-primary">
Kembali ke halaman sebelumnya
</a>
</li>
</ol>
</nav>
</div>
</div>
</div>
</div>
<!-- End Breadcrumb -->
<div class="row d-flex align-items-strech">
<div class="col-lg-12 mx-auto">
<div class="card">
<div class="card-header d-flex align-items-center">
<h4 class="card-title mb-0">Tambah Pengguna</h4>
<div class="card-actions cursor-pointer ms-auto d-flex button-group">
<a href="{{ route('roles.refresh-routes') }}" class="btn btn-sm btn-secondary">
<i class="ti ti-refresh"></i>&nbsp; refresh routes
</a>
</div>
</div>
<div class="card-body border-top">
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="POST" action="{{ route('roles.store') }}" id="formCreate">
@method('post')
@csrf
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 mt-2">
<div class="form-group">
<strong>Name:</strong>
<input type="text" class="form-control" placeholder="Role Name" name="name">
</div>
</div>
<h5 for="permissions" class="form-label mt-3 mb-3">Assign Permissions</h5>
<h6 for="permissions" class="form-label mt-3 mb-3">Check All Permission <input type="checkbox"
name="all_permission" class="check" id="allpermission"></h6>
<div class="row">
@foreach ($permissions as $key => $permission)
<div class="col-md-4">
<h5>{{ $key }}</h5>
<table class="table table-hover table-bordered">
<tr id="checkboxnya" style="background: grey !important">
<td scope="col" width="1%" style="background: grey !important">
<input type="checkbox" name="all_permission" class="check"
id="allpermission">
</td>
<td scope="col" width="20%" style="background: grey !important">
Name</td>
<td scope="col" width="1%" style="background: grey !important">
Route</td>
<td scope="col" width="1%" style="background: grey !important">
Guard</td>
</tr>
@foreach ($permission as $item)
<tr>
<td>
<input type="checkbox" name="permission[{{ $item->name }}]"
value="{{ $item->name }}" class='permission'>
</td>
<td>{{ $item->desc }}</td>
<td>{{ $item->name }}</td>
<td>{{ $item->guard_name }}</td>
</tr>
@endforeach
</table>
</div>
@endforeach
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-end mt-3">
<a href="{{ route('roles.index') }}" class="btn btn-info">Batalkan</a>
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
@stop
@push('scripts')
<script>
$('input[type="checkbox"].check').on('change', function() {
var check = this;
$(check).closest('tr').nextUntil('tr[id]').find('input[type="checkbox"]').prop(
'checked',
check
.checked);
});
$(document).ready(function() {
$('#allpermission').click(function() {
if ($(this).is(':checked')) {
$('.check').prop('checked', true);
$('.permission').prop('checked', true);
} else {
$('.check').prop('checked', false);
$('.permission').prop('checked', false);
}
});
});
</script>
@endpush

View File

@ -0,0 +1,131 @@
@extends('layouts.app')
@section('title', 'Edit Roles Akses')
@section('content')
<!-- Breadcrumb -->
<div class="card bg-info-subtle shadow-none position-relative overflow-hidden mb-4">
<div class="card-body px-4 py-3">
<div class="row align-items-center">
<div class="col-9">
<h4 class="fw-semibold mb-8">Edit Roles & Permission</h4>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item" aria-current="page">
<a href="{{ URL::to('admin/roles') }}" class="badge text-bg-light text-primary">
Kembali ke halaman sebelumnya
</a>
</li>
</ol>
</nav>
</div>
</div>
</div>
</div>
<!-- End Breadcrumb -->
<div class="row d-flex align-items-strech">
<div class="col-lg-12 mx-auto">
<div class="card">
<div class="card-header d-flex align-items-center">
<h4 class="card-title mb-0">Edit Pengguna</h4>
<div class="card-actions cursor-pointer ms-auto d-flex button-group">
<a href="{{ route('roles.refresh-routes') }}" class="btn btn-sm btn-secondary">
<i class="ti ti-refresh"></i>&nbsp; refresh routes
</a>
</div>
</div>
<div class="card-body border-top">
@if (count($errors) > 0)
<div class="alert alert-danger">
<strong>Whoops!</strong> There were some problems with your input.<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form method="POST" action="{{ route('roles.update', $role->id) }}" id="formCreate">
@method('PUT')
@csrf
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12 mt-2">
<div class="form-group">
<strong>Name:</strong>
<input type="text" class="form-control" placeholder="Role Name" name="name"
value="{{ $role->name }}">
</div>
</div>
<h5 for="permissions" class="form-label mt-3 mb-3">Assign Permissions</h5>
<h6 for="permissions" class="form-label mt-3 mb-3">Check All Permission <input type="checkbox"
name="all_permission" class="check" id="allpermission"></h6>
<div class="row">
@foreach ($permissions as $key => $permission)
<div class="col-md-4">
<h5>{{ $key }}</h5>
<table class="table table-hover table-bordered">
<tr id="checkboxnya" style="background: grey !important">
<td scope="col" width="1%" style="background: grey !important">
<input type="checkbox" name="all_permission" class="check"
id="allpermission">
</td>
<td scope="col" width="20%" style="background: grey !important">
Name</td>
<td scope="col" width="1%" style="background: grey !important">
Route</td>
<td scope="col" width="1%" style="background: grey !important">
Guard</td>
</tr>
@foreach ($permission as $item)
<tr>
<td>
<input type="checkbox" name="permission[{{ $item->name }}]"
value="{{ $item->name }}" value="{{ $item->name }}"
class='permission'
{{ in_array($item->name, $rolePermissions) ? 'checked' : '' }}>
</td>
<td>{{ $item->desc }}</td>
<td>{{ $item->name }}</td>
<td>{{ $item->guard_name }}</td>
</tr>
@endforeach
</table>
</div>
@endforeach
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-end mt-3">
<a href="{{ route('roles.index') }}" class="btn btn-info">Batalkan</a>
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
@stop
@push('scripts')
<script>
$('input[type="checkbox"].check').on('change', function() {
var check = this;
$(check).closest('tr').nextUntil('tr[id]').find('input[type="checkbox"]').prop(
'checked',
check
.checked);
});
$(document).ready(function() {
$('#allpermission').click(function() {
if ($(this).is(':checked')) {
$('.check').prop('checked', true);
$('.permission').prop('checked', true);
} else {
$('.check').prop('checked', false);
$('.permission').prop('checked', false);
}
});
});
</script>
@endpush

View File

@ -0,0 +1,89 @@
@extends('layouts.app')
@section('title', 'Hak Akses Pengguna')
@section('content')
<!-- Breadcrumb -->
<div class="card bg-info-subtle shadow-none position-relative overflow-hidden mb-4">
<div class="card-body px-4 py-3">
<div class="row align-items-center">
<div class="col-9">
<h4 class="fw-semibold mb-8">Hak Akes Pengguna</h4>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item">
<a class="text-muted text-decoration-none" href="./index.html">User Management</a>
</li>
<li class="breadcrumb-item" aria-current="page">Data Roles & Permission</li>
</ol>
</nav>
</div>
</div>
</div>
</div>
<!-- End Breadcrumb -->
<div class="row">
<div class="col-lg-12 d-flex align-items-stretch">
<div class="card w-100">
<div class="card-body p-4">
<div class="d-flex align-items-stretch">
<h5 class="card-title fw-semibold mb-4">Tabel Roles</h5>
<div class="d-inline ms-auto">
<a href="{{ route('roles.create') }}" class="btn btn-sm btn-success">
<i class="ti ti-user-plus"></i>&nbsp; Tambah
</a>
</div>
</div>
<div class="table-responsive">
<table class="table table-hover table-bordered text-nowrap mb-0 align-middle">
<thead class="text-dark fs-4">
<tr>
<th class="border-bottom-0" width="70px">
<h6 class="fw-semibold mb-0 text-center">No.</h6>
</th>
<th class="border-bottom-0">
<h6 class="fw-semibold mb-0">Name</h6>
</th>
<th class="border-bottom-0">
<h6 class="fw-semibold mb-0">Terakhir Diupdate</h6>
</th>
<th class="border-bottom-0" width="100px">
<h6 class="fw-semibold mb-0 text-center">Action</h6>
</th>
</tr>
</thead>
<tbody>
@forelse ($datas as $role)
<tr>
<td class="border-bottom-0">
<h6 class="fw-normal mb-0 text-center">
{{ ($datas->currentPage() - 1) * $datas->perPage() + $loop->index + 1 }}.
</h6>
</td>
<td class="border-bottom-0">
<h6 class="fw-semibold mb-1">{{ $role->name }}</h6>
<span class="fw-normal">{{ $role->email }}</span>
</td>
<td class="border-bottom-0">
<h6 class="fw-normal mb-0 fs-4">{{ $role->updated_at }}</h6>
</td>
<td class="border-bottom-0">
<div class="d-flex align-items-center gap-2">
<a href="{{ route('roles.edit', $role->id) }}"
class="btn btn-sm btn-primary"><i class="ti ti-edit"></i> Ubah</a>
</div>
</td>
</tr>
@empty
<div class="alert alert-danger">
Data Post belum Tersedia.
</div>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@stop

View File

@ -0,0 +1,74 @@
@extends('layouts.app')
@section('content')
<!-- Button Back -->
<a href="{{ URL::to('admin/users') }}" class="mb-3 badge text-bg-light text-primary">
<i class="ti ti-arrow-left">&nbsp;</i> Kembali
</a>
<div class="row d-flex align-items-strech">
<div class="col-lg-6 mx-auto">
<div class="card">
<div class="card-header">
<h3>Edit Pengguna</h3>
</div>
<div class="card-body border-top">
<form method="post" action="{{ route('users.update', $user->id) }}">
@csrf
@method('PUT')
<div class="mb-3">
<label for="name" class="form-label">Name</label>
<input type="text" class="form-control" id="name" name="name"
placeholder="Contoh: Ardito Pratama" value="{{ isset($user->name) ? $user->name : '' }}"
required>
<div id="emailHelp" class="form-text">Silahkan masukkan nama lengkap anda.</div>
<!-- error message-->
@error('name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email"
value="{{ isset($user->email) ? $user->email : '' }}" disabled>
</div>
<div class="mb-3">
<label for="role" class="form-label">Level Pengguna</label>
<select class="form-select @error('role') is-invalid @enderror" id="role" name="role"
required>
<option value="">Pilih Level Pengguna</option>
@forelse ($roles as $role)
<option value="{{ $role->name }}"
{{ $user->roles[0]->name == $role->name ? 'selected' : '' }}>{{ $role->name }}
</option>
@empty
<option value="">Data Kosong</option>
@endforelse
</select>
<!-- error message -->
@error('role')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control @error('password') is-invalid @enderror"
id="password" name="password">
<!-- error message -->
@error('password')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<button type="submit" class="btn btn-primary">Simpan</button>
</form>
</div>
</div>
</div>
</div>
@stop

View File

@ -0,0 +1,73 @@
@extends('layouts.app')
@section('title', 'Buat Data Pengguna')
@section('content')
<!-- Button Back -->
<a href="{{ URL::to('admin/users') }}" class="mb-3 badge text-bg-light text-primary">
<i class="ti ti-arrow-left">&nbsp;</i> Kembali
</a>
<div class="row d-flex align-items-strech">
<div class="col-lg-6 mx-auto">
<div class="card">
<div class="card-header">
<h3>Tambah Pengguna</h3>
</div>
<div class="card-body border-top">
<form method="post" action="{{ route('users.index') }}">
@csrf
@method('POST')
<div class="mb-3">
<label for="name" class="form-label">Name</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Contoh: Ardito Pratama" value="{{ old('name') }} " required>
<div id="emailHelp" class="form-text">Silahkan masukkan nama lengkap anda.</div>
<!-- error message-->
@error('name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email" name="email" value="{{ old('email') }}" required>
<!-- error message -->
@error('email')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="mb-3">
<label for="role" class="form-label">Level Pengguna</label>
<select class="form-select @error('role') is-invalid @enderror" id="role" name="role" required>
<option value="" selected>Pilih Level Pengguna</option>
@forelse ($roles as $role)
<option value="{{ $role->id }}">{{ $role->name }}</option>
@empty
<option value="">Data Kosong</option>
@endforelse
</select>
<!-- error message -->
@error('role')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password" name="password" required>
<!-- error message -->
@error('password')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<button type="submit" class="btn btn-primary">Simpan</button>
</form>
</div>
</div>
</div>
</div>
@stop

View File

@ -0,0 +1,68 @@
@extends('layouts.app')
@section('title', 'Ubah Data Pengguna')
@section('content')
<!-- Button Back -->
<a href="{{ URL::to('admin/users') }}" class="mb-3 badge text-bg-light text-primary">
<i class="ti ti-arrow-left">&nbsp;</i> Kembali
</a>
<div class="row d-flex align-items-strech">
<div class="col-lg-6 mx-auto">
<div class="card">
<div class="card-header">
<h3>Edit Pengguna</h3>
</div>
<div class="card-body border-top">
<form method="post" action="{{ route('users.update', $user->id) }}">
@csrf
@method('PUT')
<div class="mb-3">
<label for="name" class="form-label">Name</label>
<input type="text" class="form-control" id="name" name="name" placeholder="Contoh: Ardito Pratama" value="{{ isset($user->name) ? $user->name : '' }}" required>
<div id="emailHelp" class="form-text">Silahkan masukkan nama lengkap anda.</div>
<!-- error message-->
@error('name')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="mb-3">
<label for="email" class="form-label">Email</label>
<input type="email" class="form-control" id="email" value="{{ isset($user->email) ? $user->email : '' }}" disabled>
</div>
<div class="mb-3">
<label for="role" class="form-label">Level Pengguna</label>
<select class="form-select @error('role') is-invalid @enderror" id="role" name="role" required>
<option value="">Pilih Level Pengguna</option>
@forelse ($roles as $role)
<option value="{{ $role->name }}" {{ $user->roles[0]->name == $role->name ? 'selected' : '' }}>{{ $role->name }}
</option>
@empty
<option value="">Data Kosong</option>
@endforelse
</select>
<!-- error message -->
@error('role')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<div class="mb-3">
<label for="password" class="form-label">Password</label>
<input type="password" class="form-control @error('password') is-invalid @enderror" id="password" name="password">
<!-- error message -->
@error('password')
<div class="invalid-feedback">
{{ $message }}
</div>
@enderror
</div>
<button type="submit" class="btn btn-primary">Simpan</button>
</form>
</div>
</div>
</div>
</div>
@stop

View File

@ -0,0 +1,105 @@
@extends('layouts.base')
@section('content-header')
<div class="col-12">
<div class="container" style="display: contents">
<div class="row mb-2">
<div class="col-sm-6">
<h1 class="m-0"> Kasir <small>kasir 3.0</small></h1>
</div>
<div class="col-sm-6">
<ol class="breadcrumb float-sm-right">
<li class="breadcrumb-item"><a href="#">Home</a></li>
<li class="breadcrumb-item"><a href="#">Kasir</a></li>
<li class="breadcrumb-item active">History</li>
</ol>
</div>
</div>
</div>
</div>
@endsection
@section('content')
<div class="row">
<div class="col-lg-12 d-flex align-items-stretch">
<div class="card w-100">
<div class="card-body p-4">
<div class="d-flex align-items-stretch">
<h5 class="card-title fw-semibold mb-4">Data Pengguna</h5>
<div class="d-inline ms-auto">
<a href="{{ route('users.create') }}" class="btn btn-sm btn-success">
<i class="ti ti-user-plus"></i>&nbsp; Tambah
</a>
</div>
</div>
<div class="table-responsive">
<table class="table table-hover table-bordered text-nowrap mb-0 align-middle">
<thead class="text-dark fs-4">
<tr>
<th class="border-bottom-0" width="70px">
<h6 class="fw-semibold mb-0 text-center">No.</h6>
</th>
<th class="border-bottom-0">
<h6 class="fw-semibold mb-0">Name</h6>
</th>
<th class="border-bottom-0">
<h6 class="fw-semibold mb-0">Terakhir Diupdate</h6>
</th>
<th class="border-bottom-0" width="100px">
<h6 class="fw-semibold mb-0 text-center">Action</h6>
</th>
</tr>
</thead>
<tbody>
@forelse ($users as $user)
<tr>
<td class="border-bottom-0">
<h6 class="fw-normal mb-0 text-center">
{{ ($users->currentPage() - 1) * $users->perPage() + $loop->index + 1 }}.
</h6>
</td>
<td class="border-bottom-0">
<h6 class="fw-semibold mb-1">{{ $user->name }}</h6>
<span class="fw-normal">{{ $user->email }}</span>
</td>
<td class="border-bottom-0">
<h6 class="fw-normal mb-0 fs-4">{{ $user->updated_at }}</h6>
</td>
<td class="border-bottom-0">
<div class="d-flex align-items-center gap-2">
<a href="{{ route('users.edit', $user->id) }}"
class="btn btn-sm btn-primary"><i class="ti ti-edit"></i> Ubah</a>
<!-- <form onsubmit="return confirm('Apakah Anda Yakin ?');" action="{{ route('users.update', $user->id) }}" method="POST">
@csrf
@method('DELETE')
<button type="submit" class="btn btn-sm btn-danger">Hapus</button>
</form> -->
</div>
</td>
</tr>
@empty
<div class="alert alert-danger">
Data Pengguna belum Tersedia.
</div>
@endforelse
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
@endsection
@push('scripts')
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
@if (Session::has('users-message'))
<script>
Swal.fire({
text: "{{ Session::get('users-message')['msg'] }}",
icon: "{{ Session::get('users-message')['type'] }}",
timer: 2500
});
</script>
@endif
@endpush

View File

@ -1,5 +1,8 @@
<?php
use App\Http\Controllers\Admins\DashboardController;
use App\Http\Controllers\Admins\Users\RoleController;
use App\Http\Controllers\Admins\Users\UserController;
use App\Http\Controllers\Auths\AuthController;
use App\Http\Controllers\Kasir\History;
use App\Http\Controllers\Kasir\Menu;
@ -27,7 +30,7 @@ Route::group(['middleware' => 'guest'], function () {
Route::post('login', [AuthController::class, 'login_proses'])->name('login.process')->comment("Login Action");
});
Route::group(['middleware' => ['auth']], function () {
Route::group(['middleware' => ['auth', 'permission']], function () {
// Logout
Route::get('logout', [AuthController::class, 'logout'])->name('logout')->comment("Logout Action");
@ -54,4 +57,30 @@ Route::group(['middleware' => ['auth']], function () {
Route::get('/', [Menu::class, 'index'])->name('menu.index')->comment("Halaman Menu");
Route::get('/getDataMenu', [Menu::class, 'getDataMenu'])->name('menu.getDataMenu')->comment("Ambil data Menu");
});
// Dashboard
Route::get('dashboard', [DashboardController::class, 'index'])->name('dashboard.index')->comment('Halaman Dashboard');
// Profile
// Route::get('profile', [ProfileController::class, 'index'])->name('profile.index')->comment('Halaman Profile');
// Route::post('profile', [ProfileController::class, 'update'])->name('profile.update')->comment('Update Profile');
// Users
Route::get('users', [UserController::class, 'index'])->name('users.index')->comment('Halaman User');
Route::get('users/create', [UserController::class, 'create'])->name('users.create')->comment('Halaman Tambah User');
Route::post('users', [UserController::class, 'store'])->name('users.store')->comment('Tambah User');
Route::get('users/edit/{id}', [UserController::class, 'edit'])->name('users.edit')->comment('Halaman Edit User');
Route::put('users/update/{id}', [UserController::class, 'update'])->name('users.update')->comment('Perbarui User');
Route::delete('users/delete/{id}', [UserController::class, 'destroy'])->name('users.delete')->comment('Menghapus User');
// Roles
Route::group(['prefix' => 'roles'], function () {
Route::get('/', [RoleController::class, 'index'])->name('roles.index')->comment('Halaman Roles');
Route::get('/create', [RoleController::class, 'create'])->name('roles.create')->comment('Halaman Tambah Roles');
Route::post('/', [RoleController::class, 'store'])->name('roles.store')->comment('Tambah Roles');
Route::get('/edit/{id}', [RoleController::class, 'edit'])->name('roles.edit')->comment('Halaman Edit Roles');
Route::put('/update/{id}', [RoleController::class, 'update'])->name('roles.update')->comment('Perbarui Roles');
Route::delete('/delete/{id}', [RoleController::class, 'destroy'])->name('roles.delete')->comment('Menghapus Roles');
Route::get('/refresh-routes', [RoleController::class, 'refreshRoutes'])->name('roles.refresh-routes')->comment('Refresh Permission Routes');
});
});