feat(cms): implement complete SysSiteCMS content management system

Initial implementation of the HomeSysPanel CMS built with Laravel 13.0.
Includes complete admin panel, content management, user authentication,
modular architecture for products/services/chatbot, and marketing tools.

Key features:
- User authentication with email verification and password reset
- Role-based access control (Admin/User with granular permissions)
- Content management (pages, news, FAQ, downloads, galleries, banners)
- Contact management system with subjects and responses
- Marketing tools (email campaigns, visitor analytics, social sharing)
- Modular architecture (Products, Services, Chatbot modules)
- AI Chatbot integration with OpenRouter.ai and LlamaCpp support
- Visitor tracking with geolocation
- SEO optimization with meta tags and Open Graph
- Responsive design with Bootstrap 5
- Dark mode support
- Maintenance mode
- Feature request system
This commit is contained in:
marco
2026-09-07 19:06:53 -03:00
commit 38295e7e88
279 changed files with 33691 additions and 0 deletions
+87
View File
@@ -0,0 +1,87 @@
<?php
namespace App\Models;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Database\Factories\UserFactory;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
#[Fillable(['name', 'email', 'avatar', 'password', 'user_type', 'company', 'website', 'whatsapp', 'preferences', 'permissions'])]
#[Hidden(['password', 'remember_token'])]
class User extends Authenticatable implements MustVerifyEmail
{
/** @use HasFactory<UserFactory> */
use HasFactory, Notifiable;
/**
* Get the attributes that should be cast.
*
* @return array<string, string>
*/
protected function casts(): array
{
return [
'email_verified_at' => 'datetime',
'password' => 'hashed',
'preferences' => 'array',
'permissions' => 'array',
];
}
/**
* Check if the user is an Admin.
*/
public function isAdmin(): bool
{
$adminType = \App\Models\UserType::where('is_admin', true)->pluck('name')->toArray();
return in_array($this->user_type, $adminType);
}
/**
* Check if the user is a regular User.
*/
public function isUser(): bool
{
return !$this->isAdmin();
}
/**
* Check if the user has a specific permission.
* Admin types always have all permissions.
*/
public function hasPermission(string $permission): bool
{
if ($this->isAdmin()) {
return true;
}
return in_array($permission, $this->permissions ?? []);
}
/**
* Get all available permissions in the system.
*
* @return array<string, string>
*/
public static function getAvailablePermissions(): array
{
return [
'contacts' => 'Gerenciar Contatos',
'subjects' => 'Gerenciar Assuntos',
'services' => 'Gerenciar Serviços',
'faqs' => 'Gerenciar FAQ',
'downloads' => 'Gerenciar Downloads',
'products' => 'Gerenciar Produtos',
'galleries' => 'Gerenciar Galerias',
'news' => 'Gerenciar Notícias',
'pages' => 'Gerenciar Páginas',
'marketing' => 'Marketing',
'chatbot' => 'Gerenciar Chatbot',
'settings' => 'Dados da Empresa',
];
}
}