函数权限:编写与执行分别受什么约束
函数的编写和执行受不同权限检查。这篇分三层讲清:谁能在仓库里写代码、谁执行函数时要有本体权限、扩展执行又多一道关。
https://www.palantir.com/docs/foundry/functions/permissions/
原始标题:Function management > Permissions
先记住这几条
写在前面
在平台中创作与执行函数,要经过多种权限检查。本节概述你应当了解的不同类型权限,以及你可能遇到的常见问题。
编写函数的权限
编写函数的权限
函数仓库必须被授予适当的权限,以便:
- 访问 Ontology,从而能够生成正确的代码绑定。
- 加载对象,以便运行函数执行的实时预览。
仓库权限必须被显式授予,且与授予你用户账户的权限不同。因此,你必须采取具体步骤,将对象类型、链接类型与底层数据源导入包含你仓库的 Project(项目)中。
关于这些步骤的教程,请参阅本节。下面我们解释所导入的具体资源,以及为这些资源授予的权限。
Ontology entity permissions
在仓库中,每当检查运行或 Code Assist 启动时,函数插件都会基于仓库的权限加载最新的 Ontology,并为每个已加载的对象与链接类型生成代码绑定。所加载的对象与链接类型的集合,取决于以下资源类型的导入:
在函数仓库中,你可以通过导航到 Settings > Ontology 导入所需的 Ontology 资源。该界面允许你选择要导入到项目中的对象与链接类型。

如果你的用户账户可以访问多个 Ontology,你也可以选择想要使用哪一个。目前,尚不支持将多个 Ontology 导入到单个 Project。

:::callout{theme="warning" title="Ontology 导入作用于整个 Project,而非单个仓库"}
尽管上述界面出现在函数仓库内,但你导入的任何 Ontology、对象类型与链接类型都是在 Project 级别添加的。这意味着,在一个仓库中更改导入,可能会影响同一 Project 中的其他仓库。如果你希望有两个依赖不同 Ontology 实体的仓库,应将它们分到不同的 Project 中。
Object loading permissions
仓库中的 functions helper(函数助手) 允许用户以两种方式执行函数:执行一个已发布的函数,或在实时预览中执行代码。当在实时预览中执行时,函数代码在 Code Assist 中编译并运行——Code Assist 是专为代码作者快速迭代而设计的基础设施。
因为它与仓库绑定,Code Assist 受到与代码生成相同的权限要求约束,如上所述。这意味着,在实时预览中运行函数时,你希望使用的每个对象类型的底层数据源都必须导入到 Project 中。
在 functions helper 中,如果有已导入到 Project 但相应数据源未导入的对象类型,实时预览中会显示一条警告,提示你更新导入:

对于大多数对象类型,Import backing datasources(导入底层数据源) 对话框会提示你导入一个 Foundry 数据集。对于启用了行级安全的对象类型,会提示你导入一个 Restricted View(受限视图)。
已发布函数的执行权限
已发布函数的执行权限
一旦函数发布,它就准备好被更广泛的用户群体使用,并可以被配置为在 Workshop 与 Actions 等应用中执行。对于执行已发布函数的权限,仍有几点需要注意。
Function permissions
要执行一个函数,用户必须对发布该函数的仓库拥有 Viewer(查看者) 角色。通常,最好将函数仓库放在依赖该仓库中函数的终端用户应用所在的同一个 Project 中,无论这些应用是用 Workshop、Slate 还是其他工具创建的。如果用户遇到指示他们缺少读取函数权限的错误(ReadFunctionsPermissionDenied),请检查他们是否具有对仓库的读取访问。进一步了解如何移动与共享资源。
相比之下,代码为 FunctionRegistry:ReadOntologyFunctionPermissionDenied 的 PERMISSION_DENIED 错误,通常意味着该函数在 Developer Console 中未注册或不可用,而非表示文件夹级别的权限问题。请在 Developer Console 中添加并注册该函数,因为仅有的文件夹与仓库权限不足以让函数可执行。
要更广泛地审查访问,请使用侧边栏中的 Check access(检查访问) 面板,检查某人对 Workshop 或 Slate 应用的访问情况,包括对其依赖函数的访问。更多信息参见检查权限。
函数支撑的动作 是一个特殊情况:终端用户不一定需要对该函数有读取访问,就能应用使用它的动作。管理员在配置动作以使用某个函数时,必须对该函数有读取访问。之后,用户将能够基于动作级权限来应用该动作,而无论他们对函数的访问如何。
Object loading permissions
当函数加载对象数据时,无论是作为参数还是通过对象搜索,运行该函数的终端用户的权限决定了哪些对象被加载。对于使用行级权限保护的对象类型,这意味着执行同一函数的不同用户可能收到不同的结果。这一行为是预期的——用户只应看到他们有权访问的对象,并且该行为使得单个函数可以为对各对象访问权限不同的用户工作。
:::callout{theme="warning" title="仅在读取时强制执行"}
行与列的访问控制(包括受限视图、对象安全策略与属性安全标记)过滤函数运行时用户能读取的内容。这些控制不会延伸到函数的输出。为了让数据在向下游流动时保持受保护,请将这些控制与标记(marking)或基于分类的访问控制搭配使用。完整模型见访问控制传播。
扩展执行
扩展执行
管理员通过 Control Panel 中的 Functions settings(函数设置) 控制扩展执行能力。这些能力授予提升的访问,例如从函数内部调用动作,或获取存活时间(TTL)最长四小时的认证令牌。
要发布、执行或安装具备扩展能力的函数,管理员必须配置相应的允许列表(allowlist):
- 允许发布扩展函数的仓库: 只有该允许列表中的仓库才能发布具备扩展能力的函数。
- 允许以扩展能力执行的函数: 只有该允许列表中的函数才能以扩展能力执行。Foundry 在执行时检查该允许列表。
- 允许通过 Marketplace 安装扩展函数的项目: 只有该允许列表中的项目才能成功从 Marketplace 安装具备扩展能力的函数。
如果发布、执行或 Marketplace 安装对具备扩展能力的函数返回权限错误,请让你的管理员核实相关的允许列表。
延伸阅读 · 相关页面
按主题横向跳转,不必顺着目录一篇篇读。
常见问题速答 · FAQ
关于「函数权限:编写与执行分别受什么约束」,读者最常问的几个问题。