System Permissions and Data Access Rights in Salesforce.com

Security should be your first thought when implementing or optimizing your Salesforce organization. Security in Salesforce is a five-point control process:
• Organization Wide Default (OWD) settings for each object
• Salesforce Role Hierarchy
• Profile permissions for each object
• Custom sharing rules (configuration and custom code)
• View All Data / Modify All Data
Organization Wide Default (OWD) Settings for Each Object
Every object has a baseline permission setting for each object. Taken alone (without the other three sectors above), there are four choices:
• Private: Records are only viewable and editable by record Owners and System Admins in your org.
• Public Read: Records are viewable by every Salesforce User in your org.
• Public Read/Write: Records are viewable and editable by every Salesforce User in your org but only the record Owner or System Admin can transfer the record to another Owner.
• Public Read/Write/Transfer: Records are viewable, editable and can by transferred to other Users by any User in your Salesforce org.
It’s important to note that the Organization Wide Default settings are the only place in the security controls within Salesforce, where you can limit Users from interacting with data in your objects. Each of the other four security control points only serve to open up access from this OWD setting.
When determining the proper OWD for each of your standard and custom objects in Saleforce, you must ask the following questions for each object:
• Which users should NOT be able to see this object?
• Which users should NOT be able to create records in this object?
• Which users should NOT be able to edit records in this object?
• Which users should NOT be able to delete records in this object?
• Which users should NOT be able to delete records in this object?
Once you have the OWD established for each of your settings, there is one item left for you to decide before you leave this security point and move on to the Salesforce Role Hierarchy. You must, on an object by object basis, determine whether you want the role hierarchy to open up data access for this object.
Salesforce Role Hierarchy.
The role hierarchy in Salesforce is not a place for you to replicate your HR hierarchy, to build a complex network of branched job titles that will only serve to confuse your readers as they see the options pollute their reports.
The role hierarchy is simply a functionality that allows you to open up data access and permissions beyond the baseline OWD settings for each object and it impacts a few other functions in the system.
If “Grant Access Using Hierarchies” is checked on the OWD setting for an object, then roles above other roles shall inherit the object access and permissions of those roles beneath them in the hierarchy. This is extremely useful when your business processes require that managers require access to the records of those Users beneath them in the hierarchy, to edit or transfer or other tasks.
While you can make role hierarchies as complicated as you like (I’ve seen some stretch to over 3,800 roles!!!); I would recommend keeping it to below 10 roles and to make them as generic as possible. After you determine how many levels of access you will need, create them and name them Level One, Level Two, etc. and you can rename them after you have the structure nailed down.
Once you have the OWD and role hierarchy set up, it’s time to determine what permissions your Users will need and to build out your Profiles and their permissions.
The profile is the true powerhouse within Salesforce, when it comes to security and permissions. The major responsibilities of the Profile are to:
• Determine which applications the User can view
• Determine which tabs the User can view
• Which Administrative General permissions the User has
• The CRUD (Create Read Update Delete) permissions for each object
• Which Page Layouts a User sees
• The Field-Level Security (FLS) the User has to view and edit fields within each object
• Which Record Types are available to the User
• Which Record Types are default for the User within each object
• The hours and IP ranges each User has to be able to access the system
• Which Apex classes the User can execute
• Which Force.com pages the User can access
These above permissions, along with a User’s access to data (determined by the OWD), determine what Users higher above in the role hierarchy can see and do. You can see that each of these security points work in tandem with the others to allow for a complex security structure to be built that will accommodate any business requirement to close down or open up access to data for all Users in the org in almost any situation.
You can set up some pretty intricate sharing rules for each object within the Salesforce UI based on quite a few conditions (owned by, status of, etc.) but there may come a point when you need to grant privileges to specific users based on minute behaviors within the system and then it’s time to call your Developer and get them working on some Apex sharing rules to automagicate your record sharing.
All of this technical talk about security and sharing is very important to get nailed down tightly and tweak constantly when needed. You don’t want to be the company whose data gets exposed because you didn’t take the time to nail this down.
PHOTO: Security wire © by lydiashiningbrightly