Is it possible for Apex code to determine whether it is with or without sharing?Sharing / without sharing and @RemoteActionSFDC: Understanding With Sharing, Without Sharing & Unspecified Sharing Classesare Triggers (and their delegated classes) or Batch affected by sharing?Use runAs to unit test class without 'with sharing' keywordDoes “with sharing” only apply to 1st entry point of code?Security and sharing for apex classWith sharing and without sharing in apexRole-based sharing rules for partner community usersDoes class that is being called from Process Builder also runs in system Mode?How to come to a conclusion to create a Helper class “with” or “without” Sharing
What should the arbiter and what should have I done in this case?
Was there a priest on the Titanic who stayed on the ship giving confession to as many as he could?
Winning Strategy for the Magician and his Apprentice
Should I give professor gift at the beginning of my PhD?
Why doesn’t a normal window produce an apparent rainbow?
Does an ice chest packed full of frozen food need ice?
Why would future John risk sending back a T-800 to save his younger self?
How to tell your grandparent to not come to fetch you with their car?
How did they achieve the Gunslinger's shining eye effect in Westworld?
Inconsistent behavior of compiler optimization of unused string
Why was the Sega Genesis marketed as a 16-bit console?
When conversion from Integer to Single may lose precision
What is the actual quality of machine translations?
Why only the fundamental frequency component is said to give useful power?
Movie about a boy who was born old and grew young
What makes an item an artifact?
Is open-sourcing the code of a webapp not recommended?
What does the term "railed" mean in signal processing?
Should an arbiter claim draw at a K+R vs K+R endgame?
Do simulator games use a realistic trajectory to get into orbit?
Compiling c files on ubuntu and using the executable on Windows
Is an early checkout possible at a hotel before its reception opens?
Can a user sell my software (MIT license) without modification?
Do any instruments not produce overtones?
Is it possible for Apex code to determine whether it is with or without sharing?
Sharing / without sharing and @RemoteActionSFDC: Understanding With Sharing, Without Sharing & Unspecified Sharing Classesare Triggers (and their delegated classes) or Batch affected by sharing?Use runAs to unit test class without 'with sharing' keywordDoes “with sharing” only apply to 1st entry point of code?Security and sharing for apex classWith sharing and without sharing in apexRole-based sharing rules for partner community usersDoes class that is being called from Process Builder also runs in system Mode?How to come to a conclusion to create a Helper class “with” or “without” Sharing
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
As an author of the code, I can, of course, know if the context is with or without sharing when I write my code into a class with either of these keywords.
But what if I am writing my code into a class with inherited sharing, which may be consumed by classes which are both with and without sharing?
Is there any way to know in which mode the code is operating so that I could add conditional logic instead of having two completely separate implementations that might be largely identical?
apex sharing executioncontext
add a comment |
As an author of the code, I can, of course, know if the context is with or without sharing when I write my code into a class with either of these keywords.
But what if I am writing my code into a class with inherited sharing, which may be consumed by classes which are both with and without sharing?
Is there any way to know in which mode the code is operating so that I could add conditional logic instead of having two completely separate implementations that might be largely identical?
apex sharing executioncontext
add a comment |
As an author of the code, I can, of course, know if the context is with or without sharing when I write my code into a class with either of these keywords.
But what if I am writing my code into a class with inherited sharing, which may be consumed by classes which are both with and without sharing?
Is there any way to know in which mode the code is operating so that I could add conditional logic instead of having two completely separate implementations that might be largely identical?
apex sharing executioncontext
As an author of the code, I can, of course, know if the context is with or without sharing when I write my code into a class with either of these keywords.
But what if I am writing my code into a class with inherited sharing, which may be consumed by classes which are both with and without sharing?
Is there any way to know in which mode the code is operating so that I could add conditional logic instead of having two completely separate implementations that might be largely identical?
apex sharing executioncontext
apex sharing executioncontext
edited May 21 at 7:57
Oleksandr Berehovskyi
10.6k32339
10.6k32339
asked May 21 at 7:55
Brian KesslerBrian Kessler
1,7061234
1,7061234
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
This might not be the answer, but let me put my thoughts.
When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.
Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing
.
I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes. eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing
If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.
The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.
– Brian Kessler
May 22 at 21:27
add a comment |
I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.
You can read more about it here :
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.
– Brian Kessler
May 22 at 21:24
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "459"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f263095%2fis-it-possible-for-apex-code-to-determine-whether-it-is-with-or-without-sharing%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
This might not be the answer, but let me put my thoughts.
When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.
Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing
.
I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes. eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing
If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.
The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.
– Brian Kessler
May 22 at 21:27
add a comment |
This might not be the answer, but let me put my thoughts.
When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.
Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing
.
I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes. eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing
If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.
The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.
– Brian Kessler
May 22 at 21:27
add a comment |
This might not be the answer, but let me put my thoughts.
When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.
Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing
.
I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes. eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing
If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.
This might not be the answer, but let me put my thoughts.
When you use inherited sharing it's the responsibility of the caller class to handling the sharing settings for the code which the called class will be executing.
Now, you say you want to add conditional logic based on sharing settings, this means you don't have trust in the caller, Thus I would say there is no point in using the inherited sharing
.
I would go by having 2 separate classes which would specify the sharing context in name, now it would be callers responsibility to call appropriate classes. eg. MyLogicClassWithSharing , MyLogicClassWithoutSharing
If you worry about code duplication, I can think about putting the generic reusable code in some service method or putting it in a generic master class.
answered May 21 at 8:35
Pranay JaiswalPranay Jaiswal
20k53266
20k53266
The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.
– Brian Kessler
May 22 at 21:27
add a comment |
The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.
– Brian Kessler
May 22 at 21:27
The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.
– Brian Kessler
May 22 at 21:27
The problem with this approach is that there may be some long chain of dependencies between the initial invocation of some code and the code which would contain the conditional logic, so using two classes instead would require conditional logic to determine which class to invoke which would mean passing information all the way from the beginning of the chain. And if I were to do that, I might as well use that for my conditional logic in the class itself.
– Brian Kessler
May 22 at 21:27
add a comment |
I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.
You can read more about it here :
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.
– Brian Kessler
May 22 at 21:24
add a comment |
I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.
You can read more about it here :
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.
– Brian Kessler
May 22 at 21:24
add a comment |
I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.
You can read more about it here :
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
I don't think there is. Although, Salesforce has introduced Inherited Sharing keyword, recently in their Winter 19 Release, to solve ambiguity issues associated with the with and without sharing Keywords.
You can read more about it here :
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_keywords_sharing.htm
answered May 21 at 8:29
Ajinkya PhadnisAjinkya Phadnis
666
666
Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.
– Brian Kessler
May 22 at 21:24
add a comment |
Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.
– Brian Kessler
May 22 at 21:24
Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.
– Brian Kessler
May 22 at 21:24
Cheers for the response, but the entire problem is that I want a class with inherited sharing to determine conditional logic based on the caller.
– Brian Kessler
May 22 at 21:24
add a comment |
Thanks for contributing an answer to Salesforce Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsalesforce.stackexchange.com%2fquestions%2f263095%2fis-it-possible-for-apex-code-to-determine-whether-it-is-with-or-without-sharing%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown