用途
sf-permissions 是一个 Salesforce 权限管理与访问审计技能。它面向 Salesforce 权限管理场景,帮助管理 Permission Sets、Profiles、Permission Set Groups,审计访问权限,诊断权限错误,并落实最小权限安全策略。
主要能力
权限模型分层
技能将权限模型分为三层:
- Profiles:控制登录时间、IP 范围、页面布局、记录类型、默认应用,每个用户一个(必需)。
- Permission Sets:控制对象 CRUD、FLS、Apex 类、VF 页面、选项卡、自定义权限,每个用户可有多个(叠加)。
- Permission Set Groups:Permission Sets 的捆绑包,可附带 muting,每个用户可有多个(叠加)。
推荐做法是最小 Profile + Permission Sets:分配精简 Profile(如 "Minimum Access - Salesforce"),其余权限通过 Permission Sets 和 Permission Set Groups 授予。相比 Profile,Permission Sets 的优势包括:一个用户只能有一个 Profile 但可有多个 Permission Sets;Permission Sets 可叠加、可组合;Profile 在源码控制中易产生合并冲突;Permission Set Groups 支持基于角色的捆绑并用 muting 处理例外;Salesforce 正逐步弃用基于 Profile 的权限。
Permission Set XML(SFDX 源格式)
技能给出完整的 .permissionset-meta.xml 示例,涵盖 label、description、hasActivationRequired、license、objectPermissions、fieldPermissions、tabSettings、classAccesses、pageAccesses、customPermissions、userPermissions 等元素。其中 hasActivationRequired 为 true 时需在会话中激活后生效;license 限制只能分配给该许可证类型的用户;对象权限存在层级关系:Edit 需要 Read,Delete 需要 Edit,viewAllRecords/modifyAllRecords 会覆盖共享。
Permission Set Group 与 Muting
技能给出 .permissionsetgroup-meta.xml 示例,包含 label、description、status、permissionSets、mutingPermissionSet。Muting Permission Set 用于从组中移除特定权限,仅在 Permission Set Group 内生效;muting 只撤销通过该组获得权限的用户,直接分配不受影响。
Profile 元数据
Profile 仍用于登录时间/IP 限制、页面布局分配、记录类型默认值、默认应用分配。技能给出最小 Profile 策略示例,建议避免在 Profile 中放置对象/字段权限,只保留无法通过 Permission Sets 完成的部分。
对象与字段级安全(CRUD/FLS)
技能说明 CRUD 权限层级:Read 是 Edit 的前提,Edit 是 Delete 的前提;viewAllRecords 绕过共享,modifyAllRecords 绕过共享与所有权。FLS 中每个字段有 Readable 和 Editable 两个标志(Editable 需要 Readable),FLS 作用于 UI、报表、列表视图和 API;在 SOQL 中使用 WITH USER_MODE 时,被 FLS 隐藏的字段返回 null。技能还提供多条 FLS 审计查询,例如查询某 Permission Set 的字段权限、查询某用户可编辑的字段、查询谁可编辑敏感字段。
自定义权限
自定义权限是布尔标志,用于在不修改代码的情况下控制功能访问。技能给出 .customPermission-meta.xml 示例,并说明在 Apex 中使用 FeatureManagement.checkPermission('Can_Export_Data')、在 LWC 中导入 @salesforce/customPermission/Can_Export_Data、在 Flow 中使用 $Permission.Can_Export_Data 进行判断。
访问审计
技能提供多类审计查询:
- PermissionSetAssignment:查询某 Permission Set 的所有被分配用户、查询某用户的所有 Permission Sets(排除基于 Profile 的)。
- ObjectPermissions:查询谁对某对象有 Delete 权限、检查过度授权(任何对象上的 ModifyAll)。
- SetupEntityAccess:查询谁有某 Apex 类或 Connected App 的访问权限。
- PermissionSetGroupComponent:查询组内的 Permission Sets、包含某 Permission Set 的组。
权限故障排查
技能覆盖常见错误:
- INSUFFICIENT_ACCESS_OR_READONLY:用户缺少对象或记录的 Edit 权限,需检查对象级 Edit、共享访问、记录所有权、角色层级、记录锁(审批流程)。
- INSUFFICIENT_ACCESS_ON_CROSS_REFERENCE_ENTITY:用户缺少相关记录的访问权限,常见原因包括插入子记录但无父记录 Read、将查找字段改为用户不可见的记录、触发器/流更新相关记录。
- "Insufficient Privileges":通用错误,可能缺少 Apex 类访问、VF 页面访问、Lightning 组件访问、选项卡可见性、Connected App 访问,或基于会话的 Permission Set 未激活。
技能还给出 CLI 快速诊断命令示例。
共享与权限的区别
技能说明权限(CRUD/FLS)与共享是独立层:CRUD 决定用户能否创建/读取/编辑/删除某对象类型(对象级);FLS 决定用户能否查看/编辑某字段(字段级);共享决定用户能访问哪些具体记录(记录级)。用户需要同时具备正确的 CRUD/FLS 权限和共享访问。技能还列出 OWD 设置(Private、Public Read Only、Public Read/Write、Controlled by Parent)和记录访问判定顺序,并强调关键区别:viewAllRecords/modifyAllRecords 绕过该对象的共享;Apex 中 with sharing 强制共享但不强制 CRUD/FLS;SOQL 中 WITH USER_MODE 同时强制共享和 CRUD/FLS。
注意事项
技能列出多个易错点:Permission Set Groups 异步重算,变更可能需数分钟,需检查 PermissionSetGroup.Status 是 Updated 还是 Outdated;Profile 易导致合并冲突;FLS 默认不限制 API 访问,Apex 以系统模式运行,需使用 WITH USER_MODE 或 Security.stripInaccessible();自定义权限有缓存,分配变更可能需用户重新认证后才反映;muting permission sets 仅在组内生效;Permission set licenses 可能要求特定许可证,分配给无许可证用户可能静默失败;基于会话的 Permission Sets(hasActivationRequired=true)需通过 Flow 或 SessionPermSetActivation 激活,不会自动生效;viewAllRecords 不授予字段访问;每个 Profile 都有隐藏 Permission Set,查询时用 PermissionSet.IsOwnedByProfile = false 过滤;每个用户最多 1,000 个 Permission Set 分配(含基于组的)。
使用方式
技能提供完整工作流:
- 为新功能设置权限:识别所需访问(对象、字段、Apex 类、VF 页面、选项卡、自定义权限)。
- 创建 Permission Set:生成
.permissionset-meta.xml,遵循最小权限。 - 按需创建自定义权限:生成
.customPermission-meta.xml作为功能标志。 - 如适用,加入 Permission Set Group:更新
.permissionsetgroup-meta.xml。 - 如需要,创建 Muting Permission Set:仅当组对部分用户过度授权时。
- 部署:使用
sf project deploy start部署 permissionsets、permissionsetgroups、customPermissions 目录。 - 分配:使用
sf org assign permset和sf org assign permsetgroup。 - 审计:使用
sf data query查询 PermissionSetAssignment。
从 Profile 迁移到 Permission Sets 的步骤:查询 Profile 上所有非默认权限;为每个功能区域创建等效 Permission Sets;创建匹配 Profile 角色的 Permission Set Group;将组分配给受影响用户;从 Profile 移除权限(仅保留布局、记录类型、登录时间);用审计查询验证。
适用场景
适用于 Salesforce 管理员和开发者进行权限配置、访问审计、权限错误诊断、最小权限改造、Profile 向 Permission Sets 迁移等场景。
限制
技能未提供具体收费、价格、平台支持范围或效果保证等信息。部分行为(如 Permission Set Groups 异步重算、自定义权限缓存、许可证静默失败)属于 Salesforce 平台特性,具体表现以实际环境为准。