01 开始使用会话型权限集(Get Started with Session-Based Permission Sets)
本单元介绍会话型权限集(Session-Based Permission Set)——它是什么、为什么用它,以及如何创建它。
学完本单元,你将能够:
- 描述什么是会话型权限集;
- 解释为什么要使用会话型权限集;
- 创建一个会话型权限集。
会话型权限集是什么与为什么(一):它是什么(The What and Why (1))
如果你用过权限集(permission set),就知道它们有多实用。权限集让你创建一组权限,方便分配给用户。例如,你可以在一个权限集中启用 Edit Case Comments、Manage Cases 和 Edit Activated Orders 三项权限,然后一次性地分配给组织里所有的 Support 经理。
会话型权限集基于同样的原理,但多了一个"会话激活"选项。计算机会话从用户登录、开始与其他用户或设备交互时开始。例如,当你在公司网络完成身份认证时,你就开始(激活)了一个会话,它会持续到你注销,或因其他原因结束。会话也可能因公司的安全策略要求"闲置一定分钟后超时"而结束。在会话期间,你可以执行某些任务,比如提交报销、在 Chatter 上发帖和回复同事;一旦注销,会话就失效了,你必须重新认证后才能再次执行这些任务。
借助会话型权限集,你可以把权限集中某些权限的功能访问,限制在一个已激活的会话之内。当会话因任何原因结束时,会话型权限集必须被重新激活,用户才能再次访问受限资源。
会话型权限集是什么与为什么(二):为什么用它(The What and Why (2))
假设你的组织创建了一个名为 Conference Room 的自定义对象,供一个叫 Conference Room Sync 的移动应用使用。该应用对这个对象有读取和更新权限,员工可以用它管理房间设备。但能访问这个对象的员工,只有在进入特定会议室时才能获得对象访问权限;出于安全考虑,他们也只能访问房间里的一部分设备。一旦这个人离开会议室所在的 IP 范围,或会话闲置,就必须重新激活会话型权限集才能重新获得设备访问权限。
为什么想这么做?也许是因为会议室资源紧张,面试团队及其支持人员是唯一应该访问房间的人——房间必须留给公司正在进行的面试使用。因此,你不希望团队以外的任何人访问会议室应用,于是把访问限制在物理空间路由器所在的 IP 范围内。会议室里还有一些昂贵设备,只有受过培训的员工才能使用,权限集就把访问限制在投影仪和音频设备上。
又或者,你有一个访问机密信息的 Web 应用。出于安全考虑,你想把用户访问限制在预先设定的时长内。你可以创建一个会话型权限集,它只在用户用令牌(token)认证进入你的环境时才激活。令牌一过期,用户就必须重新认证才能再次访问应用。
创建会话型权限集(Create a Session-Based Permission Set)
创建会话型权限集非常简单,事实上,步骤和创建任何其他权限集几乎一模一样。唯一的区别是:创建权限集时必须勾选 Session Activation Required(需要会话激活)。
勾选 Session Activation Required 就是告诉 Salesforce:这个权限集只有在会话被激活后才会启用。
以"招聘经理需要访问雇佣合同"为例:你希望经理在需要时访问合同,但这些信息又很敏感。经理看完合同后,招聘人员可以结束会话,从而停用权限集、终止访问;之后招聘经理重新激活权限集,才能再次访问合同。
现在动手创建一个会话型权限集:
- 在 Setup 中,用 Quick Find 框搜索并进入 Permission Sets;
- Label 填
Employment Contracts Access; - API Name 填
Employment_Contracts_Access; - 勾选 Session Activation Required;
- License 选 --None--,点击 Save;
- 在 Find Settings 框中搜索并选择 Contracts 对象;
- 在 Object Permissions 中启用 Create、Read、Edit、Delete 四项权限;
- 在 Field Permissions 中为 Contract Name、Contract Start Date、Contract Terms (months) 启用 Edit Access;
- 点击 Save。
值得注意:此时这个新的会话型权限集还没什么用。为什么?因为它还没有关联任何活动会话。当你勾选 Session Activation Required 后,权限集在会话被激活之前什么都不做。当然,我们还得把权限集分配给某个人——下一步就做。
02 无需代码激活会话型权限集(Activate Session-Based Permission Sets Without Code)
创建好自己的会话型权限集之后,接下来让它变得可用。本单元涵盖激活会话型权限集的几种方式,以及如何准备、运行并用 Flow 激活权限集。
学完本单元,你将能够:
- 说出激活会话型权限集的几种方式;
- 解释为什么可能想用声明式工具来激活会话型权限集;
- 无需代码激活一个会话型权限集。
会话型权限集的激活选项(Activation Options)
要让它可用,你需要一种为权限集"激活会话"的方式。如果你喜欢动手写 API,也可以——SOAP API 中的 PermissionSet 对象有一个字段叫 HasActivationRequired,它是一个布尔值,表示该权限集是否需要关联的活动会话(true)还是不需要(false)。你可以在 SessionPermSetActivation 对象中插入一条记录,把会话 ID 和权限集组合起来,从而完成激活。
不会写代码?没关系。Salesforce 有一个你可能已经在用的声明式工具:Flow Builder。我们将用一个 Flow 来让你的会话激活流程变得顺畅,即使你不写代码。
开始构建(Get Started)
在动手之前,最好熟悉一下 Flow Builder。不熟悉 Flow 也没关系,我们在这里创建的是一个简单的 Flow——事实上,这个 Flow 只用一步就能完成!当然,如果你想深入学习,Trailhead 也有对应内容。
先确认你有权限访问 Flow:
- 进入你的配置文件(Profile)。在 Setup 中进入 Users 并选择你的配置文件,你大概率使用的是 System Administrator;
- 找到 Manage Flow 并确认它已被勾选。
稍后测试会话型权限集时,我们还会以另一个用户身份登录,所以顺便确认 Salesforce 管理员有这个能力:
- 在 Setup 中进入 Login Access Policies;
- 启用 Administrators Can Log in as Any User;
- 点击 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)
在 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 挑战里创建的用户)吧:
- 在 Setup 中进入 User Management Settings,启用 Enhanced Profile User Interface;
- 在 Setup 中进入 Profiles,选择 Minimum Access - Salesforce Clone(上一单元创建并分配给 Lynda 的配置文件);
- 在 Find Settings 框搜索并点击 Lightning Experience User,在 System Permissions 页点击 Edit,启用 Lightning Experience User 后 Save;
- 在 Find Settings 框搜索并点击 Manage Flow,在 App Permissions 页点击 Edit,启用 Manage Flow 后 Save;
- 在 Find Settings 框搜索并选择 Contracts 对象,点击 Edit 启用 Read 权限后 Save;
- 在 Setup 中进入 Permission Sets;
- 把之前创建的 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)
本单元让激活流程变得毫不费力——把 Flow 放到 Lightning 应用页面上,让用户不必再从 Setup 里运行 Flow。
学完本单元,你将能够:
- 解释为什么要用 Lightning 应用页面来激活权限集;
- 创建一个引用 Flow 的应用页面;
- 从该页面运行 Flow 来激活会话型权限集。
为什么用 Lightning 应用页面?(Why Use a Lightning App Page?)
在前面的单元里,你创建了会话型权限集、用 Flow 激活了它,并把权限集分配给了 Lynda Herman。如果就此打住,你可以让用户自己运行 Flow 来激活权限集,但这样既别扭也不够用户友好。在我们的场景里,大多数招聘经理既不需要运行 Flow,甚至可能没有运行它们的权限。
你可以用一些简单的 Visualforce 标记并创建一个自定义标签页来运行 Flow(你过去可能已经用过 Visualforce)。但如果你想让自己更省事,我们推荐使用 Lightning 应用页面。为什么?首先,完全不需要写任何标记(一点都没有!);其次,完成的步骤更少。理由已经足够充分了,我们开始动手吧。
创建应用页面(Create the App Page)
在 Lightning App Builder 中创建一个引用 Flow 的应用页面:
- 在 Setup 的 Quick Find 框中输入
Builder,选择 Lightning App Builder; - 点击 New,选择 App Page,再点击 Next;
- 把页面命名为
Activate Temp Access Flow,点击 Next; - 选择 One Region 布局,点击 Done;
- 把 Flow 组件拖到画布上,Flow 选择 Activate Contracts Access as a Screen Flow(可能已经默认选中);
- 点击 Save 并选择 Activate;
- 在 Activation 窗口中,选择 Lightning Experience;在 Add to Lightning Apps 下点击 Sales,再点击 Add page to app,然后 Save;
- 保存你的工作并点击 Back 退出 Lightning App Builder。
我们刚才做的事,就是让激活权限集的 Flow 可以通过一个 Lightning 组件轻松访问。在 Sales 应用中,你可以看到这个标签页:Activate Temp Access Flow。
招聘经理要为自己激活 Employment Contracts Access 权限集,只需点击 Activate Temp Access Flow。选中标签页后,Flow 就开始在后台运行;完成后会显示一条消息,表示 Flow 已运行完毕。现在招聘经理在当前会话中就拥有了读取、创建、编辑和删除的访问权限。
测试你的成果(Test Your Work)
现在来测试你做的所有工作:
- 以 Lynda Herman 身份登录;
- 搜索 Contracts 并选择它——此时你应该还不能编辑或创建合同;
- 在 Sales 应用中点击 Activate Temp Access Flow,你应该会看到一条消息,说明 Flow 已运行完成;
- 再次搜索 Contracts 并选择它——页面上应该出现 New 按钮,允许你创建新合同。
如果 New 按钮没有出现,试试刷新屏幕,或在 Salesforce Classic 和 Lightning Experience 之间切换一下。














