在我以往的印象中,给Profile设定VF和Apex Class的访问权限,都是需要什么就加什么。
比如新建了一个VF叫PageA, 又新建了一个Controller叫ControllerA,然后新建了一个被Controller调用的工具类ToolA。
那么,在此Profile中,PageA,ControllerA和ToolA通通都要加到Profile的访问权限里。
如果只添加了PageA,按理说应该是无法正常执行才对。
但通过实践,发现就算只添加了PageA的权限,整个功能仍然能正常运行。与之前的印象不符。
所以去查了文档,发现官方给出的解释是这样的:
Permission for an Apex class is checked only at the top level. For example, if class A calls class B, and a user profile has access only to class A but not class B, the user can still execute the code in class A. Likewise, if a Visualforce page uses a custom component with an associated controller, security is only checked for the controller associated with the page. The controller associated with the custom component executes regardless of permissions.
就是说如果代码之间存在着依赖链,那么权限判断中,只关注最顶层的那个代码。按照这个逻辑下来,只要拥有了PageA的权限,因为PageA与ControllerA的依赖关系,就自动获取了ControllerA的访问权限,同理ToolA。
知其然,不知其所以然还是不对的。