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
88 lines
2.4 KiB
PHP
Executable File
88 lines
2.4 KiB
PHP
Executable File
<?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',
|
|
];
|
|
}
|
|
}
|