From e046c77e05a31ab6cb090bf535db00fbc878dc2d Mon Sep 17 00:00:00 2001
From: Crivion
Date: Thu, 23 Oct 2025 09:53:16 +0300
Subject: [PATCH] regular user dashboard
---
app/Http/Controllers/DashboardController.php | 12 ++++-
app/Models/Database.php | 7 +++
.../js/Pages/Dashboard/User/UserDashboard.jsx | 54 ++++++++++++++++---
3 files changed, 65 insertions(+), 8 deletions(-)
diff --git a/app/Http/Controllers/DashboardController.php b/app/Http/Controllers/DashboardController.php
index 2b1aaee..1086d43 100644
--- a/app/Http/Controllers/DashboardController.php
+++ b/app/Http/Controllers/DashboardController.php
@@ -3,6 +3,8 @@
namespace App\Http\Controllers;
use App\Services\SystemStatsService;
+use App\Models\Website;
+use App\Models\Database;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
@@ -41,6 +43,14 @@ class DashboardController extends Controller
public function user()
{
- return Inertia::render('Dashboard/User/UserDashboard');
+ $user = auth()->user();
+ $websitesCount = Website::mine()->count();
+ $databasesCount = Database::mine()->count();
+ $websitesLimit = $user->domain_limit;
+ $databasesLimit = $user->database_limit;
+
+ return Inertia::render('Dashboard/User/UserDashboard', compact(
+ 'websitesCount', 'websitesLimit', 'databasesCount', 'databasesLimit'
+ ));
}
}
diff --git a/app/Models/Database.php b/app/Models/Database.php
index 6462665..fd9b53c 100644
--- a/app/Models/Database.php
+++ b/app/Models/Database.php
@@ -5,6 +5,7 @@ namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Casts\Attribute;
+use Illuminate\Database\Eloquent\Builder;
class Database extends Model
{
@@ -44,4 +45,10 @@ class Database extends Model
{
$this->attributes['db_password'] = encrypt($password);
}
+
+ public function scopeMine(Builder $query): Builder
+ {
+ $user = auth()->user();
+ return $query->when($user && !$user->isAdmin(), fn($query) => $query->where('user_id', $user->id));
+ }
}
diff --git a/resources/js/Pages/Dashboard/User/UserDashboard.jsx b/resources/js/Pages/Dashboard/User/UserDashboard.jsx
index 989bfca..acf5eb5 100644
--- a/resources/js/Pages/Dashboard/User/UserDashboard.jsx
+++ b/resources/js/Pages/Dashboard/User/UserDashboard.jsx
@@ -1,11 +1,14 @@
import { FaUsers } from "react-icons/fa6";
+import { TbWorldWww } from 'react-icons/tb';
+import { FaDatabase } from 'react-icons/fa';
+import { VscFileSubmodule } from 'react-icons/vsc';
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout';
import { Head, Link } from '@inertiajs/react';
import { usePage } from '@inertiajs/react';
export default function UserDashboard() {
- const { auth } = usePage().props;
+ const { auth, websitesCount, websitesLimit, databasesCount, databasesLimit } = usePage().props;
return (
}
>
-
+
- This is the user dashboard, {auth.user.username}
-
-
- Leave Impersonation
-
+
+
+
+
Websites
+
+ {websitesCount}/{websitesLimit ?? '∞'}
+
+
Manage Websites
+
+
+
+
+
+
+
Databases
+
+ {databasesCount}/{databasesLimit ?? '∞'}
+
+
Manage MySQL DBs
+
+
+
+
+
+
+
File Manager
+
+
Open File Manager
+
+
+
+
+
+
+ Logged in as {auth.user.username}
+ {auth.user?.is_impersonating && (
+ <>
+ •
+ Leave Impersonation
+ >
+ )}
+
);