当用户配置文件拒绝访问到子对象的Visualforce页面relatedList:使用顶点(Usin

2019-10-16 15:13发布

我有两个自定义对象,约会和会议报告。 会议报告是受聘于一个标准的主从关系的孩子。 另外,我有一个轮廓,学生,已经读创建,编辑,删除有关约会和会议报告没有任何权利。 用例是一个学生可以创建一个约会,但不能查看此任命由教师创建的会话报告。

采用标准布局为约会对象查看约会时按预期工作。 也就是说,不显示学生可以看到约会字段和会议报告的有关名单。 所有其他用户配置文件观察可以看到会议报告的有关名单。

然而,随着Visualforce页面等取代标准布局时,我曾经遇到过一个问题:

<apex:page standardController="Appointment__c">
<apex:sectionHeader title="{!$ObjectType.Appointment__c.label}" subtitle="{!Appointment__c.Name}"/>
<apex:pageBlock title="{!$ObjectType.Appointment__c.label} Detail">
    <apex:pageBlockSection showHeader="false" columns="1">
        <apex:outputField value="{!Appointment__c.Tutor_Name__c}"/>
        <apex:outputField value="{!Appointment__c.Student_Name__c}"/>           
    </apex:pageBlockSection>
 </apex:pageBlock>    
 <apex:relatedList list="Session_Reports__r"/>

这个新页面按预期工作与为会议报告对象至少阅读权限的所有用户。 学生用户有这个对象没有权利,收到此错误信息

'Session_Reports__r' is not a valid child relationship name for entity Appointment 

显然,当页面可以正确显示以不同的配置用户的这种关系确实存在。 我一直无法解决的标准布局,将导致此故障的VF页面之间的差异。 有人建议给我,我可以识别用户个人资料的VF页面,并使用这些信息来切换渲染。 然而,这种类型的做法违背了Salesforce的安全模型的目的,我不会采用这种技术。

我应该能够使用顶点:relatedList以这种方式? 还是我错误地认为,VF渲染引擎可以计算出何时能不能够显示相关列表?

Answer 1:

Salesforce的安全模型,只是要确保你不显示的数据是不特定的用户访问。 它是如何做到这一点是通过抛出该异常你看。 如果你正在构建一个自定义的VF页您负责确保你不显示一些用户不允许看到的。 请注意,这是比它只是显示不出来,如果用户没有适当的字段级安全领域的不同。

你需要添加一个检查,以验证用户可以查看对象。 好在他们有很多的“是”的方法(isAccessible,isCreatable,isDeletable等) 描述对象的结果 ,为您判断一下当前用户的权限是该对象,而无需硬编码的配置文件到您的代码。 针对您的特殊情况下,你不要什么来显示相关的列表中,如果它的对象无法访问。

Visualforce页面:

<apex:relatedList list="Session_Reports__r" 
                  rendered="{!$ObjectType.Session_Report__c.accessible}"/>


文章来源: Using apex:relatedList in a Visualforce page when the user profile denies access to child objects