Salesforce Facts: Implicit Sharing (Internal)

Mustapha El Hassak
4 min readApr 5, 2023

--

Introduction

Salesforce has released a new change in Spring ’23 around Implicit Sharing — more specifically Child Implicit sharing — called Faster Account Sharing Recalculation.
In this article we are going to list some facts about Implicit Sharing and how this new change can/will affect you.

Definition

Salesforce provides 5 types of implicit sharing: Two “Internal” and Three “External”. In this article we’ll be focusing on the two “Internal” ones that are defined int the official documentation as following:

  • Parent Implicit Sharing: If you have access to an account’s child record, you have implicit Read Only access to that account,
  • Child Implicit Sharing: If you have access to a parent account, you have access to the associated child records.

The word “Implicit” here means that the sharing is not created explicitly by the Salesforce Administrator, but it’s provided Out of the Box — implicitly — by Salesforce — which is in my opinion not true for Child Implicit Sharing — we’ll see why.

Also, “Implicit” here means that there’s no way you can change how this sharing behaves — which is in my opinion also not true when dealing with Child Implicit Sharing — we’ll see why.

The Facts

Implicit Sharing is NOT for everyone

  • Parent Implicit Sharing works only with Account as the Parent Object and Contact, Case, Opportunity, Contract and Order as Child Objects.
  • For other objects, you’ll see only the Account Name field.
Parent Implicit Sharing works for a subset of objects
  • Child Implicit Sharing works only with Account as the Parent and Contact, Case, Opportunity as Child Objects.
Child Implicit Sharing works for a subset of objects

Child Implicit Sharing comes from many places

This is the part where I think that Child Implicit sharing can still be controlled by the Administrator — as opposite to what the documentation says — as the access to the Account Child Records depends on what is the sharing mechanism giving you access to the Account record in the first place: Ownership, Sharing Rule, Territory Rule, Team Member, Manual Sharing or Apex Sharing.

Child Implicit Sharing depends on the Sharing mechanism

Child Implicit Sharing is stored in the Database

Before Spring ’23, Whenever you share an Account record with someone, Child implicit sharing is created and stored in the corresponding Child Sharing object: ContactShare, OpportunityShare and CaseShare.

Child Implicit Sharing is stored in the database

Faster Account Sharing Recalculation

Starting Spring ’23, and after enabling the new feature “Faster Account Sharing Recalculation”, the child implicit sharing will no more be stored in the database but will be calculated on the fly, making Account/Contact/Opportunity/Case Sharing Rules recalculation up to x5 times faster in certain use cases.

Salesforce will not store anymore ImplicitChild sharing records

This “calculation on the fly” will be based on the AccountShare table fields: OpportunityAccessLevel, CaseAccessLevel and ContactAccessLevel and will be applied as following:

  • Spring ’23: for Contact & Case objects,
  • Winter ’24: for Opportunity object.

Note that you still need to contact Salesforce Support to enable this new feature. Note also that Salesforce plans to enable this feature in all orgs in a future release.

Caution about an “interesting” but “rare” use case

  • If a Customer Community user is the owner of a Case or Contact record, internal users could gain access only through and “explicit” Sharing Rule or a Share Group.
  • After enabling the Faster Account Sharing Recalculation feature, those same internal users can gain access through other sharing mechanisms: Role (for Account Owners), Teams, etc… as explained in the article above.

Caution in case you query Share tables

  • If you have any existing code where you are querying the share tables (ContactShare, CaseShare and OpportunityShare) with a “where” clause like below, after enabling the Faster Account Sharing Recalculation feature, this query will return 0 records. Instead, you can query the UserRecordAccess table.
SELECT UserOrGroupId FROM ConctactShare WHERE RowCause = 'ImplicitChild'

Other Salesforce Facts

For other “Salesforce Facts” Articles please check the list below:

--

--

Mustapha El Hassak

Salesforce Certified Technical Architect (CTA) & 17x Salesforce Certified (Sales Cloud, Service Cloud, Application Architect, System Architect, CRM Analytics)