Modeladmin gridfield pagination acting like all dataobject are beeing loaded even on canView false

<%- if @topic_view.topic.tags.present? %>
<%= t 'js.tagging.tags' %>: <%- @topic_view.topic.tags.each do |t| %> <%= t %> <%- end %>
<% end %>

Silverstripe Version:
4.7
Question:
How can i fix the wrong pagination on my modeladmin gridfield?

I’ve an object “invoice” and a modeladmin “invoiceadmin” for this class.
I’m returning true in “canView()” only if the invoice belongs to the current loged in member or if the member has permission.
The problem is now that the pagination is acting like all objects are beeing listed when actualy only a few are beeing listed on the last pagination page.

Do i really have to manualy filter this list and create a pagination for it?
This sounds wrong to me… but i can’t find anything about it online.

Invoice.php

class Invoice extends DataObject implements PermissionProvider
{
    private static $db = [
        "Title" => "Varchar",
        "LastReminder" => "Date",
        "Deadline" => "Date",
        "Total" => "Currency",
        "IsPaid" => "Boolean",
    ];

    private static $has_one = [
        "Member" => Member::class,
    ];

    private static $many_many = [
        "Products" => Product::class,
    ];

    private static $many_many_extraFields = [
        "Products" => [
            "PurchasedPrice" => "Currency",
            "Quantity" => "Int",
            "PriceTotal" => "Currency",
        ],
    ];

    public function populateDefaults()
    {
        $this->Deadline = date("Y-m-d", strtotime("+ 60 days"));
        parent::populateDefaults();
    }

    private static $summary_fields = [
        "Created.Nice" => "Created",
        "Member.Name" => "For Member",
        "Title" => "Title",
        "Total" => "Total Price",
        "IsPaid" => "Is paid?",
    ];

    const CMS_PERMISSION_CODE = "CMS_ACCESS_" . __CLASS__;
    public function providePermissions()
    {
        $implodedClassName = strtolower(implode(" ", preg_split('/(?=[A-Z])/', __CLASS__)));
        $permissionsArr = [];
        foreach (["view", "edit", "delete", "create", "create clubfee"] as $value) {
            $permissionsArr[strtoupper(self::CMS_PERMISSION_CODE . "_" . str_replace(" ", "_", $value))] = [
                "name" => "Can $value $implodedClassName",
                "category" => "CMS administrate '" . __CLASS__ . "'",
                "help" => "Gives permissions to $value $implodedClassName",
            ];
        }
        return $permissionsArr;
    }

    public function canView($member = null)
    {
        $member = Security::getCurrentUser();
        $mID = $member->ID ?? null;
        return (Permission::check(strtoupper(self::CMS_PERMISSION_CODE . "_VIEW"), "any", $member) || ($mID && $mID == $this->Member->ID))
    }

    public function canEdit($member = null)
    {
        return Permission::check(strtoupper(self::CMS_PERMISSION_CODE . "_EDIT"), "any", $member);
    }

    public function canDelete($member = null)
    {
        return Permission::check(strtoupper(self::CMS_PERMISSION_CODE . "_DELETE"), "any", $member);
    }

    public function canCreate($member = null, $context = [])
    {
        return Permission::check(strtoupper(self::CMS_PERMISSION_CODE . "_CREATE"), "any", $member);
    }

    public function getCMSfields()
    {
        $fields = Parent::getCMSFields();
        $fields->removeFieldsFromTab("Root.Main", [
            "Total",
        ]);
        return $fields;
    }

InvoiceAdmin.php

class InvoicesAdmin extends ModelAdmin
{
    private static $menu_title = "Invoices";
    private static $url_segment = "invoices";

    private static $managed_models = [
        Invoice::class,
    ];
}