Sichtbarkeit von Monitor-Daten einschränken

Der Data Filter ermöglicht die Einschränkung der Sichtbarkeit von Monitordaten und ist unter dem Einstellungsnamen Data_Filter konfigurierbar. Das Ziel dieser Funktion ist es, Benutzern initial keine oder nur einige Daten anzuzeigen. Je nach Organisationszugehörigkeit, Rollen und Rechten soll sich die Sichtbarkeit auf die Daten dann ausweiten. Diese Benutzer-Attribute können im Identity-Manager erstellt und nachgesehen werden.

Standardkonfiguration von Data_Filter

Die Standardkonfiguration des Data Filters sieht wie folgt aus:

{
    "baseFilter": [
        {
            "bool": {
                "must": [
                    {
                        "match_all": {}
                    }
                ],
                "must_not": [],
                "should": []
            }
        }
    ],
    "organisations": {
        "org1": [
            {
                "bool": {
                    "must": [
                        {
                            "match_all": {}
                        }
                    ],
                    "must_not": [],
                    "should": []
                }
            }
        ]
    },
    "roles": {
        "role1": [
            {
                "bool": {
                    "must": [
                        {
                            "match_all": {}
                        }
                    ],
                    "must_not": [],
                    "should": []
                }
            }
        ]
    },
    "rights": {
        "right1": [
            {
                "bool": {
                    "must": [
                        {
                            "match_all": {}
                        }
                    ],
                    "must_not": [],
                    "should": []
                }
            }
        ]
    }
}

Eine falsche Konfiguration führt dazu, dass im Monitor keine Daten mehr geladen werden können.

Vorgehen:
Als erstes wird ein Basisfilter (baseFilter) gesetzt, der steuert, was gesehen werden darf, wenn keine weiteren Rechte vorliegen. In der Standardkonfiguration ist keine Einschränkung festgelegt.
Danach wird die Sichtbarkeit der Daten für bestimmte Organisationen (organisations), Rollen (roles) oder Rechte (rights) wieder ausgeweitet.

Für die Einstellung der Sichtbarkeit werden Bool-Abfragen eingesetzt. So können mittels must, must_not und should Abfragen erstellt werden, die Ergebnisse aus dem Monitor liefern und angezeigt werden sollen. Die Bool-Abfragen umfassen die folgenden Arten:

  • must: Der Wert muss vorkommen

  • must_not: Der Wert darf nicht vorkommen

  • should: Der Wert sollte vorkommen

Beispiele für den baseFilter

Sichtbarkeit vollständig einschränken

Hier wird die Sichtbarkeit der Daten vollständig eingeschränkt. Wenn keine weiteren Einstellungen für Organisationen, Rollen oder Rechte getroffen wurden, werden zunächst keine Daten im Monitor angezeigt. Die match_all-Abfrage gibt alle Daten zurück, aber durch die Verwendung des must_not-Filters werden alle Übereinstimmungen ausgeschlossen. Das führt dazu, dass keine Daten zurückgegeben werden.

{
    "baseFilter": [
        {
            "bool": {
                "must_not": [
                    {
                        "match_all": {}
                    }
                ],
                "should": [],
                "must": []
            }
        }
    ]
}

Die Beispiele stellen Ausschnitte aus der Konfiguration dar und sollten sie nicht alleine ersetzen.

Sichtbarkeit teilweise einschränken

Beispiel 1
In dem folgenden Beispiel eines Monitors mit Projektdaten soll sichergestellt werden, dass standardmäßig nur öffentliche Projekte angezeigt werden. Dafür muss das Projekt den Wert "public" in der Spalte "visibility" enthalten.

{
    "baseFilter": [
        {
            "bool": {
                "must": [
                    {
                        "term": {
                            "visibility": "public"
                        }
                    }
                ]
            }
        }
    ]
}

Beispiel 2
Wenn standardmäßig bestimmte Daten anhand eines Musters sichtbar sein sollen, kann eine Wildcard in der Abfrage verwendet werden. In dem folgenden Beispiel eines Monitors mit Produktdaten sollen Produkte angezeigt werden, die einen bestimmten Namenspräfix haben.

{
    "baseFilter": [
        {
            "bool": {
                "must": [
                    {
                        "wildcard": {
                            "product_name": "prefix_*"
                        }
                    }
                ]
            }
        }
    ]
}

Beispiel 3
Wenn standardmäßig die Sichtbarkeit der Daten zeitlich eingeschränkt werden soll, kann dies folgendermaßen umgesetzt werden.

{
    "baseFilter": [
        {
            "bool": {
                "must": [
                    {
                        "range": {
                            "timestamp": {
                                "gte": "now-7d/d",
                                "lte": "now/d"
                            }
                        }
                    }
                ]
            }
        }
    ]
}

Beispiele für Organisationen, Rollen, Rechte

Sichtbarkeit ausweiten

Um die Einschränkung der Sichtbarkeit für bestimmte Benutzer-Attribute wieder aufzuheben, werden ebenfalls Bool-Abfragen eingesetzt.
Sollen beispielsweise die Nutzer mit der Rolle "bpcadmin" alle Daten sehen können, kann das unter roles mittels match_all festgelegt werden.

{
    "roles": {
        "bpcadmin": [
            {
                "match_all": {}
            }
        ]
    }
}

Wenn der baseFilter so konfiguriert wurde, dass beispielsweise standardmäßig nur die Daten der letzten 7 Tage angezeigt werden und die Nutzer mit der Rolle "analyst" erweiterte Zugriffsrechte auf die Daten der letzten 30 Tage haben sollen, kann das für die Rolle wie folgt umgesetzt werden.

{
    "roles": {
        "analyst": [
            {
                "bool": {
                    "must_not": [],
                    "should": [],
                    "must": [
                        {
                            "range": {
                                "timestamp": {
                                    "gte": "now-30d/d",
                                    "lte": "now/d"
                                }
                            }
                        }
                    ]
                }
            }
        ]
    }
}

Sichtbarkeit einschränken

Ist der baseFilter so konfiguriert, dass bestimmten Organisationen, Rollen oder Rechten zu viele Daten angezeigt werden, kann die Sichtbarkeit auch individuell eingschränkt werden.
In diesem Beispiel sollen Praktikanten keine archivierten Projekte sehen können.

{
    "roles": {
        "intern": [
            {
                "bool": {
                    "must_not": [
                        {
                            "term": {
                                "status": "archived"
                            }
                        }
                    ],
                    "should": [],
                    "must": []
                }
            }
        ]
    }
}

Dynamische Filterwerte

Innerhalb von organisations, roles und rights können dynamische Filter "#" angelegt werden. Ist einer vorhanden, so wird der Filter innerhalb des Blocks für jede Organisation / Rolle / Recht angelegt und dabei der Filterwert durch einen Namen ersetzt.

  • #this.name#: Ersetzt den Filterwert mit dem Namen der Organisation, Rolle oder Recht

  • #user.loginName#: Ersetzt den Filterwert mit dem login-Namen des angemeldeten Nutzers

Beispiel

Ein Benutzer ist den folgenden Rollen zugeordnet: "Projects", "Marketing" und "CRM". Damit der Benutzer alle Daten sehen kann, die für seine Rollen relevant sind, kann der dynamische Filter angewendet werden.

{
    "roles": {
        "#": [
            {
                "bool": {
                    "must_not": [],
                    "should": [],
                    "must": [
                        {
                            "term": {
                                "unit": "#this.name#"
                            }
                        }
                    ]
                }
            }
        ]
    }
}

So sieht der Benutzer alle Daten, bei denen in der Spalte "unit" die Namen seiner Rollen ("Projects", "Marketing", "CRM") stehen. Wird eine neue Rolle hinzugefügt oder eine Rolle entfernt, muss der Filter nicht mehr angepasst werden.


Keywords: