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 is the most important source of natural gas? coal, oil or other?
Can you heal a summoned creature?
Why are C64 games inconsistent with which joystick port they use?
Why does not valiant's reduction show NP=RP?
How can people dance around bonfires on Lag Lo'Omer - it's darchei emori?
Different circular sectors as new logo of the International System
How were these pictures of spacecraft wind tunnel testing taken?
Array Stutter Implementation
Integrating an absolute function using Mathematica
What is the 中 in ダウンロード中?
Is healing by fire possible?
Full backup on database creation
Windows 10 Programs start without visual Interface
Is CD audio quality good enough for the final delivery of music?
Tic-tac-toe for the terminal, written in C
Ticket sales for Queen at the Live Aid
Full horizontal justification in table
If a person had control of every single cell of their body, would they be able to transform into another creature?
What is the largest (size) solid object ever dropped from an airplane to impact the ground in freefall?
Were pens caps holes designed to prevent death by suffocation if swallowed?
Employer demanding to see degree after poor code review
What is the difference between “/private/var/vm” and “/vm”?
Would Brexit have gone ahead by now if Gina Miller had not forced the Government to involve Parliament?
Is it possible to play as a necromancer skeleton?
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,6981234
1,6981234
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
19.8k53265
19.8k53265
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