Salesforce:如何仅在当前用户有权更新当前记录的情况下呈现apex。记录级安全性

Salesforce:如何仅在当前用户有权更新当前记录的情况下呈现apex。记录级安全性,salesforce,apex-code,visualforce,user-permissions,Salesforce,Apex Code,Visualforce,User Permissions,我正在尝试修复我为这个问题发布的代码 正如您在文章中所看到的,Visualforce页面有一个自定义控制器,其中包含案例的选项卡式内容。列出CaseComments的唯一方法是使用自定义Apex。控制器执行一个简单的查询来检索当前案例的所有案例注释 我只想显示一个“编辑”链接,如果当前用户有权编辑特定案例注释的实例 我在这里找到了一个关于基于对象级安全性动态渲染组件的好博客: 基于我试着使用的那个帖子 $ObjectType.CaseComment.updateable 具体如下: <

我正在尝试修复我为这个问题发布的代码

正如您在文章中所看到的,Visualforce页面有一个自定义控制器,其中包含案例的选项卡式内容。列出CaseComments的唯一方法是使用自定义Apex。控制器执行一个简单的查询来检索当前案例的所有案例注释

我只想显示一个“编辑”链接,如果当前用户有权编辑特定案例注释的实例

我在这里找到了一个关于基于对象级安全性动态渲染组件的好博客:

基于我试着使用的那个帖子

$ObjectType.CaseComment.updateable
具体如下:

<apex:repeat value="{!comments}" var="c">
    <tr>
    <td class="commentsActionColumn">
    <!-- open the case comment for edit -->
    <apex:outputLink title=""
        rendered="{!$ObjectType.CaseComment.updateable}" 
    value="/{!c.id}/e?parent_id={!c.parentId}&retURL=/apex/{!$CurrentPage.Name}%3Fid={!case.id}" style="font-weight:bold">Edit</apex:outputLink> 
    </td>
    <td>
    <!-- display the case comment formatted using the apex outputField -->
    <div class="commentTdClass">
    <apex:outputField value="{!c.commentbody}"></apex:outputField>
    </div>
    </td>
    </tr>
</apex:repeat>

编辑
不幸的是,updateable的测试是在对象级别上进行的,因此如果当前用户有权编辑任何CaseComent,那么它将在所有CaseComents上返回true

如果当前用户可以修改特定行,我需要记录级验证才能显示编辑操作

有什么想法吗

更新 当我重读我的问题时,我发现它并不像应该的那样清晰


当我遍历CaseComments集合时,对于给定的案例,我需要知道当前用户是否可以安全地编辑特定的CaseComments,而不会看到“you't have permission page”。此测试必须以CaseComent逐CaseComent记录级别为基础,因为任何给定的案例都会有许多CaseComent,所有这些CaseComent都是由不同的用户提供的

您可以通过几种方式(我认为)

如果您想采用纯编程的方式,那么它将讨论使用共享对象来允许与特定用户或组共享记录

否则,如果可能,您可以使用角色和层次结构管理来组织此过程,以便只有在特定级别或更高级别的特定角色中的人员才能查看和访问记录

保罗

更新:

根据您在下面的评论,我认为您希望使用apex共享。如果查看,您可以看到您应该访问共享对象,以检查用户在此对象中是否有记录,以查看特定的记录实例。比如:

MyObject__Share share1 = [Select ParentId, UserOrGroupId, AccessLevel from MyObject__Share where ParentId = :myrecordId And UserOrGroupId = :UserId];
if(share1 != null)
{ code to allow the record to be viewed}
else
{code to deny access}
我还没有测试或尝试,所以你会想调整它,但这应该是一般的想法


保罗

看看下面的URL

看起来我们可以使用下面的东西。但是我还没有测试

SELECT RecordId, [HasReadAccess, HasEditAccess, HasAllAccess, MaxAccessLevel] FROM UserRecordAccess
WHERE UserId = [single ID]
AND RecordId = [single ID] 
//or Record IN [list of IDs]

谢谢你的回答。我可能用我的措辞误导了你(对我来说很正常)。问题不在于对象级别,而在于记录级别权限。我不想创建共享所有案例评论的规则。我只是想知道当前用户是否可以安全地编辑案例评论,而不会看到“您没有权限页面”。这是基于CaseComment记录级别的,因为任何给定的案例都会有许多CaseComment,所有这些CaseComment都是由不同的用户提供的。这更清楚吗?更新了答案,如果有帮助,请告诉我。老实说,这对我来说是一个新的领域,但它应该有效。