创建用户界面以请求权限和引用¶
本主题介绍作为提供商,您如何使用 Streamlit 和 Snowsight 创建用户界面,以允许使用者授予权限并为已安装的 Snowflake Native App 创建引用。要从 Streamlit 程序访问 Snowflake 权限和引用,Snowflake Native App Framework 需要提供 Python Permission SDK。
有关 Python Permission SDK 中方法的信息,请参阅 Python Permission SDK 参考。
关于权限和引用¶
有关使用 Snowflake Native App Framework 向使用者请求权限和引用的一般信息,请参阅 创建和访问使用者账户中的对象。
关于 Python Permission SDK¶
Snowflake Native App Framework 提供了 Python Permission SDK,允许提供商在 Snowflake Native App 中执行以下操作:
检查账户级别权限。
请求清单文件中列出的全局权限。
请求对清单文件中定义的对象及其相应对象级别权限的引用。
请求权限操作,例如创建 API 集成或创建共享。
使用 Python Permission SDK,Snowsight 在已安装 Snowflake Native App 的 Security 选项卡中显示访问请求。
有关 Python Permission SDK 中方法的信息,请参阅 Python Permission SDK 参考。
创建接口以批准权限和绑定引用的工作流程¶
以下常规工作流程概述了实施 Streamlit 应用程序以请求使用者授予权限和引用所需的步骤。
创建应用程序包。
在清单文件中,指定权限并定义 Snowflake Native App 所需的引用。
将 Streamlit 应用程序添加到应用程序包。
将
environment.yml
文件添加到应用程序包。备注
environment.yml
文件必须与用于实现 Snowsight 接口的主 Streamlit 文件位于同一目录中。将
snowflake-native-apps-permission
库添加为依赖项。在 Streamlit 应用程序中导入
snowflake.permissions
库。将函数添加到 Streamlit 应用程序,以调用 SDK 提供的函数。
将 Python Permission SDK 添加到 Streamlit 环境¶
若要在 Streamlit 应用程序中使用 Python Permission SDK,请将 snowflake-native-apps-permission
包添加为 environment.yml
文件中的依赖项,如以下示例所示:
name: sf_env
channels:
- snowflake
dependencies:
- snowflake-native-apps-permission
在 Streamlit 应用程序中 Python Permission SDK 导入¶
要将 Python Permission SDK 导入 Streamlit 应用程序,请在应用程序中包含以下导入语句:
import snowflake.permissions as permissions
向使用者请求权限¶
以下示例演示如何使用 Python Permission SDK 执行不同的任务。
查看账户级别权限¶
此示例展示了如何使用 Python Permission SDK 的 get_held_account_privileges() 方法检查清单文件中声明的权限是否已授予给已安装的 Snowflake Native App。
例如,如果 Snowflake Native App 需要在 APPLICATION 对象外部创建数据库,则提供商可以在清单文件中定义引用,如下所示:
privileges:
- CREATE DATABASE:
description: "Creation of ingestion (required) and audit databases"
通过 Python Permission SDK,您可以使用 get_held_account_privileges() 方法获取已向 Snowflake Native App 授予的权限列表。
import streamlit as st
import snowflake.permissions as permissions
...
if not permissions.get_held_account_privileges(["CREATE DATABASE"]):
st.error("The app needs CREATE DB privilege to replicate data")
此示例调用 get_held_account_privileges() 函数,并将 CREATE DATABASE 权限作为参数传递。提供商可以使用 get_held_account_privileges() 函数,等到使用者向应用程序授予所需的权限。
备注
只有清单文件中定义的权限才是 get_held_account_privileges() 的有效实参。传递其他实参会导致错误。
要求使用者执行权限操作¶
提供者可以使用 Python Permission SDK 请求 Snowflake Native App 所需的权限操作。
例如,要请求允许 Snowflake Native App 连接到 ServiceNow 实例的 API 集成,提供商将在清单文件中定义 API 集成:
references:
- servicenow_api_integration:
label: "API INTEGRATION for ServiceNow communication"
description: "An integration required in order to support extraction and visualization of ServiceNow data."
privileges:
- USAGE
object_type: API Integration
register_callback: config.register_reference
接下来,在 Streamlit 应用程序中,提供商调用 request_reference() 方法来请求 API 集成的 USAGE 权限,如以下示例所示:
permissions.request_reference("servicenow_api_integration")