Personalizar seu app Streamlit com informações do usuário

A API st.user permite que seu app Streamlit in Snowflake acesse informações sobre a pessoa que está visualizando o app no momento. Você pode usar isso para exibir saudações personalizadas, filtrar dados por usuário ou rastrear quem realizou uma ação.

O que st.user fornece no Streamlit in Snowflake

No Streamlit in Snowflake, st.user fornece dois atributos para o visualizador atual:

  • st.user.user_name – o nome de usuário Snowflake do visualizador.

  • st.user.email – o endereço de e-mail do visualizador.

O exemplo a seguir saúda o visualizador pelo nome de usuário Snowflake:

import streamlit as st

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

Consultar o nome de exibição do visualizador (opcional)

st.user.user_name retorna o nome de usuário do Snowflake (por exemplo, JSMITH). Para exibir um nome mais amigável, você pode consultar o nome de exibição do usuário com DESCRIBE USER. Isso requer privilégios elevados: a função do proprietário do app deve ter o privilégio MONITOR no objeto do usuário ou ser um administrador da conta.

O exemplo a seguir saúda o visualizador pelo nome de exibição dele:

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

Personalizar consultas de dados

Filtre os resultados de consulta para que cada visualizador exiba apenas os próprios dados. Este exemplo usa session.sql() em vez de conn.query() para que a consulta seja executada novamente a cada nova execução, em vez de retornar resultados em 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)

Rastrear quem realizou uma ação

Inclua a identidade do visualizador ao gravar dados de volta para o 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!")

Relacionamento com CURRENT_USER()

A função CURRENT_USER() do SQL retorna o nome de usuário do Snowflake do proprietário da sessão. Em apps Streamlit in Snowflake que usam direitos de proprietário, este é o proprietário do objeto Streamlit, não o visualizador. Para identificar o visualizador em seu código Python, use st.user.

Se você precisar da identidade do visualizador em consultas SQL, considere usar direitos de chamador restritos (versão preliminar). Com direitos de chamador restritos, as consultas são executadas como o visualizador; portanto, CURRENT_USER() retorna a identidade do visualizador. Para obter mais informações, consulte Direitos restritos do autor da chamada e do Streamlit in Snowflake.

Diferenças de tempo de execução

st.user está disponível nos tempos de execução de contêiner e de warehouse. O comportamento é o mesmo em ambos os ambientes: ele retorna a identidade da pessoa que visualiza o app, não o proprietário do objeto Streamlit.