feat(User,Role): add users and role , permssion , filament panel | [USER , ROLE]

This commit is contained in:
2026-05-29 15:28:56 +03:30
parent d923019dc5
commit 1c408130d0
71 changed files with 3111 additions and 11 deletions

View File

@@ -4,19 +4,51 @@ namespace App\Models;
// use Illuminate\Contracts\Auth\MustVerifyEmail;
use Database\Factories\UserFactory;
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Database\Eloquent\Attributes\Fillable;
use Illuminate\Database\Eloquent\Attributes\Hidden;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
#[Fillable(['name', 'email', 'password'])]
#[Fillable(['name', 'email', 'mobile', 'password'])]
#[Hidden(['password', 'remember_token'])]
class User extends Authenticatable
class User extends Authenticatable implements FilamentUser
{
/** @use HasFactory<UserFactory> */
use HasFactory, Notifiable;
/**
* @return BelongsToMany<Role, $this>
*/
public function roles(): BelongsToMany
{
return $this->belongsToMany(Role::class);
}
public function hasRole(string|array $roles): bool
{
$roles = (array) $roles;
return $this->roles()->whereIn('slug', $roles)->exists();
}
public function hasPermission(string|array $permissions): bool
{
$permissions = (array) $permissions;
return $this->roles()
->whereHas('permissions', fn ($query) => $query->whereIn('slug', $permissions))
->exists();
}
public function canAccessPanel(Panel $panel): bool
{
return $this->hasRole('admin') || $this->hasPermission('admin.access');
}
/**
* Get the attributes that should be cast.
*