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 + + )} +
);