Apex类名修饰with sharing Vs without sharing

with sharing Vs without sharing

学习目标
1,了解with sharing和without sharing的作用和区别
2,什么时候使用with sharing和without sharing

对于新手来说(大神可忽视),在写一个Apex类的时候,工具会自动帮我们写成
public with sharing class helloWord{},可能新手会忽略这个问题。为什么要带with sharing?它有什么用?

with sharing和without sharing的作用和区别

1,with sharing:在类名前带上这个修饰符,那么类里涉及到的Sql查询,都会遵守当前用户的Profile,PermissionSet,Sharing Setting,Role等权限的并集。假设helloWord这个类有一个查询A对象的a字段的Dml操作。但是User A并没有该查询a字段的权限。那么加上with sharing就会出现查询结果为空。without sharing刚好相反,这家伙就是让该类避开系统的所有权限,只要能够调用这个类,那么里面所有的操作都不受权限管控。

什么时候使用with sharing和without sharing

1,当Apex类对应的是前台页面的控制类的时候,建议加上with sharing。这样方便限制记录的查看和读写。可以使用group和sharing setting去做控制记录的查看和读写。
2,当Apex类是Rest控制类是,(强烈建议)加上with sharing,因为rest类是供外部访问的,不加上会有安全隐患
3,在系统内部类和类之间的传递类,不涉及前台展示的类。比如工具类等,可以加上without sharing。这些基础类不做权限的控制。意味着只要出发的动作能出发这些类,就给他足够权限去做这件事情。这样做的好处是防止出现幽灵bug(找半天都找不出原因,最后发现是某个字段没权限)。

如果本文有错误,欢迎指出。一起学习,一起进步!

猜你喜欢

转载自blog.csdn.net/weixin_41126799/article/details/86514283
今日推荐