Personalisieren Ihrer Streamlit-App mit Benutzerinformationen

Die st.user API lässt Ihre Streamlit in Snowflake App auf Informationen über die Person zugreifen, die die App gerade betrachtet. Sie können diese verwenden, um personalisierte Begrüßungen anzuzeigen, Daten nach Benutzern zu filtern oder zu verfolgen, wer eine Aktion ausgeführt hat.

Was st.user in Streamlit in Snowflake bereitstellt

In Streamlit in Snowflake liefert st.user zwei Attribute für den aktuellen Betrachter:

  • st.user.user_name – Snowflake-Benutzername des Betrachters.

  • st.user.email – Die E-Mail-Adresse des Betrachters.

Im folgenden Beispiel wird der Betrachter mit seinem Snowflake-Benutzernamen empfangen:

import streamlit as st

st.write(f"Hello, {st.user.user_name}!")

Suchen Sie den Anzeigenamen des Betrachters (optional)

st.user.user_name gibt den Snowflake-Benutzernamen zurück (z. B. JSMITH). Um einen besseren Namen anzuzeigen, können Sie mit :doc:` DESCRIBE USER </sql-reference/sql/desc-user>` nach dem Anzeigenamen des Benutzers suchen. Dies erfordert erhöhte Berechtigungen: Die Rolle des Eigentümers der App muss die MONITOR-Berechtigung für das Benutzerobjekt haben oder ein Kontoadministrator sein.

Im folgenden Beispiel wird der Betrachter mit seinem Anzeigenamen empfangen:

import streamlit as st

conn = st.connection("snowflake")
session = conn.session()

user_info = session.sql(
    f"DESCRIBE USER {st.user.user_name}"
).collect()
display_name = st.user.user_name
for row in user_info:
    if row["property"] == "DISPLAY_NAME":
        display_name = row["value"]
        break

st.write(f"Hello, {display_name}!")

Personalisieren von Datenabfragen

Filtern Sie die Abfrageergebnisse, sodass jeder Betrachter nur seine eigenen Daten sieht. Dieses Beispiel verwendet session.sql() anstelle von conn.query(), sodass die Abfrage bei jeder Wiederholung aktuell ausgeführt wird, anstatt die Ergebnisse zwischenzuspeichern:

import streamlit as st

conn = st.connection("snowflake")
session = conn.session()
data = session.sql(
    "SELECT * FROM my_table WHERE owner = ?",
    params=[st.user.user_name],
).to_pandas()
st.dataframe(data)

Verfolgen, wer eine Aktion ausgeführt hat

Fügen Sie die Identität des Betrachters ein, wenn Sie Daten zurück nach Snowflake schreiben:

import streamlit as st

conn = st.connection("snowflake")
session = conn.session()

with st.form("entry_form"):
    value = st.text_input("Enter a value")
    submitted = st.form_submit_button("Save")

if submitted:
    session.sql(
        "INSERT INTO my_table (created_by, value) VALUES (?, ?)",
        params=[st.user.user_name, value],
    ).collect()
    st.success("Saved!")

Beziehung zu CURRENT_USER()

Die SQL-Funktion CURRENT_USER() gibt den Snowflake-Benutzernamen des Sitzungseigentümers zurück. In Streamlit in Snowflake-Apps mit Eigentümerrechten ist dies der Eigentümer des Streamlit-Objekts, nicht der Betrachter. Um den Betrachter in Ihrem Python-Code zu identifizieren, verwenden Sie stattdessen st.user.

Wenn Sie die Identität des Betrachters in SQL-Abfragen benötigen, sollten Sie die Verwendung der eingeschränkten Aufruferrechte (Vorschau) in Betracht ziehen. Mit eingeschränkten Aufruferrechten werden Abfragen als Betrachter ausgeführt, also gibtCURRENT_USER() die Identität des Betrachters zurück. Weitere Informationen dazu finden Sie unter Beschränkte Aufruferrechte und Streamlit in Snowflake.

Unterschiede zur Laufzeit

st.user ist sowohl für die Laufzeiten von Containern als auch von Warehouses verfügbar. Das Verhalten ist in beiden Umgebungen gleich: Es wird die Identität der Person zurückgegeben, die die App betrachtet, und nicht der Eigentümer des Streamlit-Objekts.