我有两个自定义对象,约会和会话报告。会话报告是标准主从关系中 Appointment 的子项。此外,我有一个个人资料 Student,它对约会具有读取-创建-编辑-删除功能,而对会话报告没有权限。用例是学生可以创建约会,但无法查看导师为此约会创建的会话报告。
查看约会时,为约会对象使用标准布局可以按预期工作。即,学生可以看到约会字段,并且不会显示会话报告的相关列表。观察到的所有其他用户配置文件都可以看到会话报告的相关列表。
但是,在用 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 安全模型的目的,我不会采用这种技术。
我应该能够以这种方式使用 apex:relatedList 吗?还是我错误地认为 VF 渲染引擎可以判断何时可以显示相关列表,何时不能显示相关列表?