SFDC:关于with sharing和without sharing 关键字声明Apex类,涉及到的CRUD/FLS/SHARING的个人总结

2023-11-10 07:50

本文主要是介绍SFDC:关于with sharing和without sharing 关键字声明Apex类,涉及到的CRUD/FLS/SHARING的个人总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在Salesforce实际开发中,开发者或多或少都会遇见由于操作者权限不足导致的代码报错等BUG,那么到底该如何规避这些问题呢?

关于本篇文章我想叙述的重点在于 fls/crud 对VF端渲染的影响:

首先,为了测试准备好测试代码以及测试用户。

VF PAGE:注意两个pageblock对应的是同一个对象的两个字段,每一个pageblock内对应的是同一个字段的不同展现形式(不同的标签)


CONTROLLER:


1.当我用户的简档对于Account的权限为:all no。

页面无内容展示。

2.当我用户的简档对于Account的权限为:

页面展示:

会发现,apex:inputfield无效,并且这个时候对于SLA__C字段都看不见,原因是什么?

既然看不见 ,那我们就要往字段级别考虑,由于该用户对Account有读取权限,那么我们首先要检查字段的级别:


Name:


SLA__C:


经过对比发现我们的猜想是对的!这里要额外注意的是inputtext不受FLS控制。

那么说到这里,你可能有疑惑,


接下来点击保存后:日志报错:

System.VisualforceException: 创建访问权限因为 Account 而被拒绝,控制器操作方法可能无法执行。

这个错误的原因:当你对一个对象没有创建的权限时,你可以在controller里new xxx(),此时如果你在前台用apex:inputxxx 标签渲染改对象,那么save之后系统首先会将这个错抛出来;如果你没引用只是在后台new object ,并保存 这个object,那么不会有任何问题!

3.当权限调整为:


结果同2。


4.当权限调整为:


结果略有不同的是,inputfield 生效了。

首先总结一下关于crud和fls在VF页面的控制(不论是否声明):

(1)当你对一个对象没有查看权限,那么你在前台是渲染不出数据来的

(2)当你有编辑对象的权限时,VF的apex:inputxxx 是enforce 你 遵守FLS级别的控制!

(3)在controller内,及时你没有这个字段的权限,你是一样可以拿到的!

不知道大家看到这里能否理解(第一次写SF博客,还请见谅)。。。


最后上一个总结(只说明一下with/without/no declare 的作用):你可能会疑惑为什么你没有说 是否声明sharing对于页面渲染的问题。经过我的测试是没有区别的,具体结果还需各位自己亲身验证一下最好!

关于sharing的类声明,其实我的理解就是Force.com 对你 所获取记录的控制(你能看到多少记录那就意味着你能拿到多少记录)。那么说到这里你可能会问,拿到记录你能都编辑么?答案肯定的告诉你:能(无论你是否有编辑和创建记录的权限,不涉及页面)。类级别的代码不enforce你的权限。

但是!!!卖个关子:

        这里留一个题,既然类不强制你的权限,那么当我在后台保存一个查找字段的时候与 声明sharing 有无关系?如果有,原因是什么?

声明一下:本篇文章的内容都属于个人的总结,如果有纰漏或者错误的地方欢迎大家提出,本人联系方式QQ34697865.

文章后期维护!

如有雷同纯属巧合嘻嘻嘻


















这篇关于SFDC:关于with sharing和without sharing 关键字声明Apex类,涉及到的CRUD/FLS/SHARING的个人总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/381324

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

MySQL-CRUD入门1

文章目录 认识配置文件client节点mysql节点mysqld节点 数据的添加(Create)添加一行数据添加多行数据两种添加数据的效率对比 数据的查询(Retrieve)全列查询指定列查询查询中带有表达式关于字面量关于as重命名 临时表引入distinct去重order by 排序关于NULL 认识配置文件 在我们的MySQL服务安装好了之后, 会有一个配置文件, 也就

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果

HomeBank:开源免费的个人财务管理软件

在个人财务管理领域,找到一个既免费又开源的解决方案并非易事。HomeBank&nbsp;正是这样一个项目,它不仅提供了强大的功能,还拥有一个活跃的社区,不断推动其发展和完善。 开源免费:HomeBank 是一个完全开源的项目,用户可以自由地使用、修改和分发。用户友好的界面:提供直观的图形用户界面,使得非技术用户也能轻松上手。数据导入支持:支持从 Quicken、Microsoft Money