会话型权限集与安全(Session-Based Permission Sets and Security)

会话型权限集只在会话激活期间授予访问权限,非常适合保护敏感资源。本文从概念讲起:什么是会话型权限集、为什么用它(会议室、令牌、雇佣合同等场景),再到创建时勾选 Session Activation Required,然后用无需代码的 Flow 激活权限集并分配给用户测试,最后把 Flow 挂到 Lightning 应用页面上,让用户一键激活临时访问。...

📅 2026/10/14 ✍️ ponybai 🏷️ salesforce, headless

01 开始使用会话型权限集(Get Started with Session-Based Permission Sets)

slide_2
slide_3

本单元介绍会话型权限集(Session-Based Permission Set)——它是什么、为什么用它,以及如何创建它。

学完本单元,你将能够:

  • 描述什么是会话型权限集;
  • 解释为什么要使用会话型权限集;
  • 创建一个会话型权限集。

会话型权限集是什么与为什么(一):它是什么(The What and Why (1))

slide_4

如果你用过权限集(permission set),就知道它们有多实用。权限集让你创建一组权限,方便分配给用户。例如,你可以在一个权限集中启用 Edit Case Comments、Manage Cases 和 Edit Activated Orders 三项权限,然后一次性地分配给组织里所有的 Support 经理。

会话型权限集基于同样的原理,但多了一个"会话激活"选项。计算机会话从用户登录、开始与其他用户或设备交互时开始。例如,当你在公司网络完成身份认证时,你就开始(激活)了一个会话,它会持续到你注销,或因其他原因结束。会话也可能因公司的安全策略要求"闲置一定分钟后超时"而结束。在会话期间,你可以执行某些任务,比如提交报销、在 Chatter 上发帖和回复同事;一旦注销,会话就失效了,你必须重新认证后才能再次执行这些任务。

借助会话型权限集,你可以把权限集中某些权限的功能访问,限制在一个已激活的会话之内。当会话因任何原因结束时,会话型权限集必须被重新激活,用户才能再次访问受限资源。

会话型权限集是什么与为什么(二):为什么用它(The What and Why (2))

slide_5

假设你的组织创建了一个名为 Conference Room 的自定义对象,供一个叫 Conference Room Sync 的移动应用使用。该应用对这个对象有读取和更新权限,员工可以用它管理房间设备。但能访问这个对象的员工,只有在进入特定会议室时才能获得对象访问权限;出于安全考虑,他们也只能访问房间里的一部分设备。一旦这个人离开会议室所在的 IP 范围,或会话闲置,就必须重新激活会话型权限集才能重新获得设备访问权限。

为什么想这么做?也许是因为会议室资源紧张,面试团队及其支持人员是唯一应该访问房间的人——房间必须留给公司正在进行的面试使用。因此,你不希望团队以外的任何人访问会议室应用,于是把访问限制在物理空间路由器所在的 IP 范围内。会议室里还有一些昂贵设备,只有受过培训的员工才能使用,权限集就把访问限制在投影仪和音频设备上。

又或者,你有一个访问机密信息的 Web 应用。出于安全考虑,你想把用户访问限制在预先设定的时长内。你可以创建一个会话型权限集,它只在用户用令牌(token)认证进入你的环境时才激活。令牌一过期,用户就必须重新认证才能再次访问应用。

创建会话型权限集(Create a Session-Based Permission Set)

slide_6

创建会话型权限集非常简单,事实上,步骤和创建任何其他权限集几乎一模一样。唯一的区别是:创建权限集时必须勾选 Session Activation Required(需要会话激活)。

勾选 Session Activation Required 就是告诉 Salesforce:这个权限集只有在会话被激活后才会启用。

以"招聘经理需要访问雇佣合同"为例:你希望经理在需要时访问合同,但这些信息又很敏感。经理看完合同后,招聘人员可以结束会话,从而停用权限集、终止访问;之后招聘经理重新激活权限集,才能再次访问合同。

现在动手创建一个会话型权限集:

  1. 在 Setup 中,用 Quick Find 框搜索并进入 Permission Sets;
  2. Label 填 Employment Contracts Access;
  3. API Name 填 Employment_Contracts_Access;
  4. 勾选 Session Activation Required;
  5. License 选 --None--,点击 Save;
  6. 在 Find Settings 框中搜索并选择 Contracts 对象;
  7. 在 Object Permissions 中启用 Create、Read、Edit、Delete 四项权限;
  8. 在 Field Permissions 中为 Contract Name、Contract Start Date、Contract Terms (months) 启用 Edit Access;
  9. 点击 Save。

值得注意:此时这个新的会话型权限集还没什么用。为什么?因为它还没有关联任何活动会话。当你勾选 Session Activation Required 后,权限集在会话被激活之前什么都不做。当然,我们还得把权限集分配给某个人——下一步就做。

02 无需代码激活会话型权限集(Activate Session-Based Permission Sets Without Code)

slide_7
slide_8

创建好自己的会话型权限集之后,接下来让它变得可用。本单元涵盖激活会话型权限集的几种方式,以及如何准备、运行并用 Flow 激活权限集。

学完本单元,你将能够:

  • 说出激活会话型权限集的几种方式;
  • 解释为什么可能想用声明式工具来激活会话型权限集;
  • 无需代码激活一个会话型权限集。

会话型权限集的激活选项(Activation Options)

slide_9

要让它可用,你需要一种为权限集"激活会话"的方式。如果你喜欢动手写 API,也可以——SOAP API 中的 PermissionSet 对象有一个字段叫 HasActivationRequired,它是一个布尔值,表示该权限集是否需要关联的活动会话(true)还是不需要(false)。你可以在 SessionPermSetActivation 对象中插入一条记录,把会话 ID 和权限集组合起来,从而完成激活。

不会写代码?没关系。Salesforce 有一个你可能已经在用的声明式工具:Flow Builder。我们将用一个 Flow 来让你的会话激活流程变得顺畅,即使你不写代码。

开始构建(Get Started)

slide_10

在动手之前,最好熟悉一下 Flow Builder。不熟悉 Flow 也没关系,我们在这里创建的是一个简单的 Flow——事实上,这个 Flow 只用一步就能完成!当然,如果你想深入学习,Trailhead 也有对应内容。

先确认你有权限访问 Flow:

  1. 进入你的配置文件(Profile)。在 Setup 中进入 Users 并选择你的配置文件,你大概率使用的是 System Administrator;
  2. 找到 Manage Flow 并确认它已被勾选。

稍后测试会话型权限集时,我们还会以另一个用户身份登录,所以顺便确认 Salesforce 管理员有这个能力:

  1. 在 Setup 中进入 Login Access Policies;
  2. 启用 Administrators Can Log in as Any User;
  3. 点击 Save。

现在回到我们的 Flow。点击 App Launcher,在 Search apps and items 框输入 auto 并选择 Automation,在 Flows 面板点击 New,然后在 Frequently Used 下选择 Screen Flow。

在 Flow 画布上,点击 Start 元素之后路径上的加号,选择 Action。在 Search Actions 中开始输入 Activate 并选择 Activate Session-Based Permission Set。Label 填 Activate Employment Contracts Access(API Name 会自动变成 Activate_Employment_Contracts_Access),在 Set Input Values 中把 Permission Set Name 填为 Employment_Contracts_Access(这是权限集的 API 名称)。最后把 Flow 保存为 Activate Contracts Access as a Screen Flow。

上图的 Flow 画布上只有一个 Action,用来激活会话型权限集。Flow 的创建步骤很简单吧?简单到有经验的 Flow 用户可能会想:"难道不能做比一步更多的 Flow 吗?"当然可以,但眼下我们聚焦于会话型权限集的使用,先继续。

分配并用 Lynda 测试(Assign & Test with Lynda)

slide_11

在 Flow Builder 中点击 Run 运行 Flow,就能激活权限集。但点击 Run 后你会看到一个错误界面。这时去查一下你的邮箱——"查邮箱"?没错,因为你会收到一封解释 Salesforce 错误的邮件。看来还没人分配到 Employment Contracts Access 权限集。

运行 Flow 时遇到问题,记得检查是否收到错误邮件。记住我们在处理三个不同区域:权限集、用户分配和 Flow。邮件里的细节能帮你快速排障。例如,如果你在 Flow 里引用了一个不存在的权限集名称、Flow 里存在逻辑问题,或者还没把 Flow 引用的权限集分配给用户,都会收到错误邮件。本例中,你会收到一封说明"缺少用户分配"的邮件。

错误提示是:Error Occurred: The permission set must be pre-assigned to the user before being activated(权限集在激活前必须预先分配给用户)。这个错误可以忽略——因为接下来我们才把权限集分配给用户。通常情况下你会先把用户分配给权限集;但假如你忘了给新员工分配权限集,这个人尝试运行 Flow 时就会碰到这个错误。

返回 Flow Builder,点击 Activate 激活 Flow。在没有用户分配时激活 Flow 不会造成任何损害,但要等有人分配到权限集后,Flow 才能完成我们想要的工作。

我们希望用户在会话型权限集被激活后能编辑和创建合同。这个用户是招聘经理,需要访问合同工的雇佣合同。确保这个人当前对 Contracts 对象只有只读权限(不能编辑、不能创建),而且必须能运行 Flow。就用 Lynda Herman(第一单元 hands-on 挑战里创建的用户)吧:

  1. 在 Setup 中进入 User Management Settings,启用 Enhanced Profile User Interface;
  2. 在 Setup 中进入 Profiles,选择 Minimum Access - Salesforce Clone(上一单元创建并分配给 Lynda 的配置文件);
  3. 在 Find Settings 框搜索并点击 Lightning Experience User,在 System Permissions 页点击 Edit,启用 Lightning Experience User 后 Save;
  4. 在 Find Settings 框搜索并点击 Manage Flow,在 App Permissions 页点击 Edit,启用 Manage Flow 后 Save;
  5. 在 Find Settings 框搜索并选择 Contracts 对象,点击 Edit 启用 Read 权限后 Save;
  6. 在 Setup 中进入 Permission Sets;
  7. 把之前创建的 Employment Contracts Access 权限集分配给 Lynda。

现在以 Lynda 身份登录,进入 Contracts 对象。你能看到合同,但页面上没有 New 按钮,所以暂时无法创建。

上图是没有 New 按钮的 Contracts 列表视图。保持以 Lynda 身份登录,进入 Setup 的 Flows,运行 Activate Contracts Access 流程。再次进入 Contracts 对象,会发现现在出现了 New 按钮,可以创建合同了。

上图是出现 New 按钮后的 Contracts 列表视图。如果 New 按钮没有出现,试试刷新屏幕,或在 Salesforce Classic 和 Lightning Experience 之间切换一下。

在当前会话的剩余时间里,Lynda 拥有对 Contracts 对象的 Create、Read、Edit、Delete 权限,以及对 Contract Name、Contract Start Date、Contract Terms (months) 的编辑权限。但我们大概不希望用户每次想创建或修改合同时都跑去 Setup 里运行 Flow。下一单元,我们把流程对每个人来说都做得更简单。

03 让激活 Flow 更容易访问(Create Easy Access to the Activation Flow)

slide_12
slide_13

本单元让激活流程变得毫不费力——把 Flow 放到 Lightning 应用页面上,让用户不必再从 Setup 里运行 Flow。

学完本单元,你将能够:

  • 解释为什么要用 Lightning 应用页面来激活权限集;
  • 创建一个引用 Flow 的应用页面;
  • 从该页面运行 Flow 来激活会话型权限集。

为什么用 Lightning 应用页面?(Why Use a Lightning App Page?)

slide_14

在前面的单元里,你创建了会话型权限集、用 Flow 激活了它,并把权限集分配给了 Lynda Herman。如果就此打住,你可以让用户自己运行 Flow 来激活权限集,但这样既别扭也不够用户友好。在我们的场景里,大多数招聘经理既不需要运行 Flow,甚至可能没有运行它们的权限。

你可以用一些简单的 Visualforce 标记并创建一个自定义标签页来运行 Flow(你过去可能已经用过 Visualforce)。但如果你想让自己更省事,我们推荐使用 Lightning 应用页面。为什么?首先,完全不需要写任何标记(一点都没有!);其次,完成的步骤更少。理由已经足够充分了,我们开始动手吧。

创建应用页面(Create the App Page)

slide_15

在 Lightning App Builder 中创建一个引用 Flow 的应用页面:

  1. 在 Setup 的 Quick Find 框中输入 Builder,选择 Lightning App Builder;
  2. 点击 New,选择 App Page,再点击 Next;
  3. 把页面命名为 Activate Temp Access Flow,点击 Next;
  4. 选择 One Region 布局,点击 Done;
  5. 把 Flow 组件拖到画布上,Flow 选择 Activate Contracts Access as a Screen Flow(可能已经默认选中);
  6. 点击 Save 并选择 Activate;
  7. 在 Activation 窗口中,选择 Lightning Experience;在 Add to Lightning Apps 下点击 Sales,再点击 Add page to app,然后 Save;
  8. 保存你的工作并点击 Back 退出 Lightning App Builder。

我们刚才做的事,就是让激活权限集的 Flow 可以通过一个 Lightning 组件轻松访问。在 Sales 应用中,你可以看到这个标签页:Activate Temp Access Flow。

招聘经理要为自己激活 Employment Contracts Access 权限集,只需点击 Activate Temp Access Flow。选中标签页后,Flow 就开始在后台运行;完成后会显示一条消息,表示 Flow 已运行完毕。现在招聘经理在当前会话中就拥有了读取、创建、编辑和删除的访问权限。

测试你的成果(Test Your Work)

slide_16

现在来测试你做的所有工作:

  1. 以 Lynda Herman 身份登录;
  2. 搜索 Contracts 并选择它——此时你应该还不能编辑或创建合同;
  3. 在 Sales 应用中点击 Activate Temp Access Flow,你应该会看到一条消息,说明 Flow 已运行完成;
  4. 再次搜索 Contracts 并选择它——页面上应该出现 New 按钮,允许你创建新合同。

如果 New 按钮没有出现,试试刷新屏幕,或在 Salesforce Classic 和 Lightning Experience 之间切换一下。


文章来源:Trailhead - Session-Based Permission Sets and Security