Enforcing object and field permissions
As previously mentioned, all Apex runs in System Mode and has access to all metadata and data within the org. This means that regardless of which permissions the user may have on an object or field, Apex can see all objects and fields. This, again, has some positive and negative consequences, as set out here:
- On the positive side, we are now able to ensure that our code can act in ways that our user could not through a standard UI. For example, we may have a field storing sensitive data that the user should not see or have access to for compliance reasons. Our code can still access this field on behalf of the user to enable it to be used within their workflow. As long as the code is correctly encapsulated and limited in how it is accessed, this is a great way of both enforcing permissions and allowing the desired business process to operate freely.
- On the negative side, this model means that if we are not careful, then we can accidentally...