Apex Managed Sharing — Implementation

DEX455 - Apex 安全与共享模型完全指南

📄 第 217 页 🎬 视频课程

课程章节介绍

各位同学,大家好,今天我们来聊聊 Apex 托管共享这个很有用的功能。 简单来说,Apex 托管共享就是让你能直接用代码来控制 Salesforce 里记录的共享权限,不用每次都去 UI 上点点点。也就是说,咱开发人员可以通过写 Apex,想办法“嘿,这条记录该让谁看见”,然后用程序自动去实现。 要用这个功能,有几个关键点你得记住。 第一,每次你用代码共享记录时,都必须带上一个“共享原因”——你可以把它想象成一个标签,说明“这条记录为什么被分享出去?”。比如是因为业务流程需要,还是临时审批。这个共享原因要去自定义对象的详细信息页面里手动创建,创建好以后代码里才能引用。 第二,实际共享操作的对象是什么呢?是每个自定义对象自动生成的一个特殊的“共享对象”,名字一般就是你的对象名后面加个“__Share”,比如 CustomBody__Share。你直接往这个对象里插入一条记录,就能指定“把哪个用户/组”赋予“只读”或“读写”权限了。 这里有个小细节要注意:如果你给同一个用户、同一个共享原因插入一条新的共享记录,而这人之前已经有了一条,那系统会自动比较访问级别。如果新的级别更高,就会把旧的替换掉;如果更低,这条插入就会被忽略。总之,最终这个人拿到的永远是他能得到的最⾼权限,不会降级。 第三,Apex 托管共享还有一个“重新计算”的概念。比如你的数据变了,共享条件也跟着变,那你就得重新算一遍所有记录的共享。怎么做呢?必须写一个实现了 Database.Batchable 接口的批处理类,然后把这个类和你的自定义对象关联起来,这样系统就能在需要时自动跑这个批处理去刷新共享。 最后还有一个很重要的前提:你这个自定义对象的“组织范围默认值”绝对不能设成最宽松的级别,比如全员都可读可写。如果那样还搞什么 Apex 托管共享呢?必须是private或者至少是只读,才能通过代码去控制额外的人看到什么。 好了,今天这一页Slide的内容大概就是这些,理解了这几个点,你再去看后续具体的实现,就会轻松很多。我们下节课接着聊具体的代码怎么写。

关键词

Apex Salesforce Developer Guide