*/ protected $fillable = [ 'name', 'email', 'password', 'phone', 'role_id', ]; /** * The attributes that should be hidden for serialization. * * @var array */ protected $hidden = [ 'password', 'remember_token', ]; /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'email_verified_at' => 'datetime', 'password' => 'hashed', ]; public function role(): BelongsTo { return $this->belongsTo(Role::class); } public function permissions(): BelongsToMany { return $this->belongsToMany(Permission::class, 'role_user', 'user_id', 'role_id') ->join('permission_role', 'role_user.role_id', '=', 'permission_role.role_id') ->join('permissions', 'permission_role.permission_id', '=', 'permissions.id') ->select('permissions.*') ->distinct() ->withTimestamps(); } public function hasRole(string $roleSlug): bool { return $this->role()->where('slug', $roleSlug)->exists(); } public function hasPermission(string $permissionSlug): bool { if ($this->hasRole('super_admin')) { return true; } $role = $this->role; return $role && $role->hasPermission($permissionSlug); } public function hasAnyPermission(array $permissionSlugs): bool { if ($this->is_super_admin) { return true; } foreach ($permissionSlugs as $permissionSlug) { if ($this->hasPermission($permissionSlug)) { return true; } } return false; } public function hasAllPermissions(array $permissionSlugs): bool { if ($this->is_super_admin) { return true; } foreach ($permissionSlugs as $permissionSlug) { if (!$this->hasPermission($permissionSlug)) { return false; } } return true; } }