public function hasPermission($permission) { if (is_array($permission)) { foreach ($permission as $perm) { if ($this->hasPermission($perm)) { return true; } } } if (is_string($permission)) { $permission = Permission::where('name', $permission)->first(); } if (is_integer($permission)) { $permission = Permission::find($permission); } if (!$permission instanceof Permission) { throw new \InvalidArgumentException('Argument must be integer, string, or an instance of ' . Permission::class); } foreach ($this->roles as $assignedRole) { foreach ($assignedRole->permissions as $assignedPermission) { if ($permission->id === $assignedPermission->id) { return true; } } } return false; }