= fflib_SharingMode Enum :Author: Wilhelmus G.J. Velzeboer :Email: wim@velzeboer.nl :Date: 2021 :Revision: version 1 link:README.asciidoc[<- _Back to main overview_] Enum with the Application Binding Sharing Modes. == Enum values - WithSharing - WithoutSharing - InheritedSharing - None These values can be set in the link:fflib_AppBinding.asciidoc[AppBindings] to define which kind of access modifier the implementation class is using. The Dynamic Domain Factory is using this sharing mode in the process of resolving the bindings, to return the implementation class with the correct sharing mode. === Example Lets assume we have the following bindings configured in the link:fflib_AppBindingResolver.asciidoc[fflib_AppBindingResolver] |=== | Binding Type | Sharing mode | Implementation | Account._SObjectType_ | WithSharing | AccountsSelector.WithSharing._class_ | Account._SObjectType_ | WithoutSharing | AccountsSelector.WithoutSharing._class_ |=== The application is configured to use the Dynamic Domain Factory. As you can see the `Selector` property doesn't define a sharing mode, so the default sharing "WithSharing" is used. ```java public class Application { private static fflib_IAppBindingResolver bindingResolver = new fflib_AppBindingResolver(); public static final fflib_ISelectorFactory Selector = new fflib_DynamicSelectorFactory(bindingResolver); public static final fflib_ISelectorFactory ElevatedSelector = new fflib_DynamicSelectorFactory(bindingResolver) .setSharingMode(fflib_SharingMode.WithSharing); } ``` The selector is setup with three access modifiers ```java public virtual inherited sharing class AccountsSelector extends fflib_SObjectSelector implements IAccountsSelector { public static IAccountsSelector newInstance() { return (IAccountsSelector) Application.Selector.newInstance(Account.SObjectType); } public static IAccountsSelector newWithoutSharingInstance() { return (IAccountsSelector) Application.ElevatedSelector.newInstance(Account.SObjectType); } public AccountsSelector() { super(); } public AccountsSelector(Boolean includeFieldSetFields, Boolean enforceCRUD, Boolean enforceFLS) { super(includeFieldSetFields, enforceCRUD, enforceFLS); } public List getSObjectFieldList() { return new List { Account.Id, Account.Name, Account.Rating }; } public Schema.SObjectType getSObjectType() { return Account.SObjectType; } public virtual List selectById(Set idSet) { return (List) selectSObjectsById(idSet); } public virtual List selectByRating(Set rating) { return (List) Database.query( newQueryFactory() .setCondition('Rating IN :rating') .toSOQL() ); } public with sharing class WithSharing extends AccountsSelector { public WithSharing() { super(true, true, true); } public override List selectById(Set idSet) { return super.selectById(idSet); } public override List selectByRating(Set rating) { return super.selectByRating(rating); } } public without sharing class WithoutSharing extends AccountsSelector { public WithoutSharing() { super(true, false, false); } public override List selectById(Set idSet) { return super.selectById(idSet); } public override List selectByRating(Set rating) { return super.selectByRating(leadSources); } } } ```