Personnaliser l’application Streamlit avec des informations utilisateur

L’API st.user permet à votre application |sis|d’accéder aux informations de la personne qui est en train de la consulter. Vous pouvez utiliser cette API pour afficher des messages personnalisés, filtrer les données par utilisateur ou savoir qui a effectué une action.

Ce que st.user fournit dans Streamlit in Snowflake

Dans Streamlit in Snowflake,:code:st.user fournit deux attributs pour l’utilisateur actuel :

  • st.user.user_name – le nom d’utilisateur Snowflake de l’utilisateur.

  • st.user.email – l’adresse e-mail de l’utilisateur.

L’exemple suivant accueille l’utilisateur par son nom d’utilisateur Snowflake :

import streamlit as st

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

Rechercher le nom d’affichage de l’utilisateur (facultatif)

st.user.user_name renvoie le nom d’utilisateur de Snowflake (par exemple,``JSMITH``). Pour afficher un nom plus convivial, vous pouvez rechercher le nom d’affichage de l’utilisateur avec:doc:DESCRIBEUSER</sql-reference/sql/desc-user>. Cela nécessite des privilèges élevés : le rôle du propriétaire de l’application doit avoir le privilège MONITOR sur l’objet utilisateur ou être administrateur de compte.

L’exemple suivant accueille l’utilisateur par son nom d’affichage :

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}!")

Personnaliser les requêtes de données

Filtrer les résultats de la requête de sorte que chaque utilisateur ne voie que ses propres données. Cet exemple utilise session.sql() au lieu de``conn.query()`` afin que la requête s’exécute de nouveau à chaque nouvelle exécution plutôt que de renvoyer des résultats en cache :

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)

Suivre qui a effectué une action

Inclure l’identité de l’utilisateur lors de la réécriture des données dans Snowflake :

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!")

Relation à CURRENT_USER()

La fonction SQL CURRENT_USER () renvoie le nom d’utilisateur Snowflake du propriétaire de la session. Dans les applications Streamlit in Snowflake utilisant les droits du propriétaire, il s’agit du propriétaire de l’objet Streamlit, et non de l’utilisateur. Pour identifier l’utilisateur dans votre code Python, utilisez:code:st.user à la place.

Si vous avez besoin de l’identité de l’utilisateur dans les requêtes SQL, envisagez d’utiliser les droits restreints de l’appelant (avant-première). Avec des droits d’appelant restreints, les requêtes s’exécutent en tant qu’utilisateur, doncCURRENT_USER () renvoie l’identité de l’utilisateur. Pour plus d’informations, voir Restriction des droits de l’appelant et Streamlit in Snowflake.

Différences d’exécution

st.user est disponible dans les environnements d’exécution des conteneurs et des entrepôts. Le comportement est le même dans les deux environnements : il renvoie l’identité de la personne qui utilise l’application, et non le propriétaire de l’objet Streamlit.