with sharing and without sharing
Class with sharing and without sharing in Salesforce
With Sharing – user mode execution - to enforce the sharing rules that apply to the current user.
Without Sharing – system mode execution - to ensure that the sharing rules for the current user are not enforced.
Apex code runs in system context. In system context, Apex code has access to all objects and fields— object permissions, field-level security, sharing rules aren’t applied for the current user. This is to ensure that code won’t fail to run because of hidden fields or objects for a user.
executeAnonymous always executes using the full permissions of the current user.
If a class is not declared as either with or without sharing, the current sharing rules remain in effect. This means that if the class is called by a class that has sharing enforced, then sharing is enforced for the called class.
Default is without sharing (System mode).
Although custom controllers and controller extension classes execute in system mode and thereby ignore user permissions and field-level security, you can choose whether they respect a user's organization-wide defaults, role hierarchy, and sharing rules by using the with sharing keywords in the class definition.