0

我正在尝试修复我为这个问题VisualForce 发布的代码:将回车符转换为长文本字段中的 html 换行符

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

如果当前用户有权编辑特定案例评论的实例,我只想显示“编辑”链接。

我在这里找到了一篇关于基于对象级安全性动态渲染组件的好博客:http: //forcearchitects.deliveredinnovation.com/2011/02/05/render-visualforce-components-dynamically-based-on-object-level-security/

根据我尝试使用的帖子

$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>

不幸的是,可更新的测试是在对象级别上的,因此如果当前用户有权编辑任何 CaseComment,它会在所有 CaseComment 上返回 true。

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

有任何想法吗?

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

当我遍历 CaseComment 集时,对于给定的 Case,我需要知道当前用户是否可以安全地编辑特定 CaseComment 而不会看到“您没有权限页面”。此测试必须在 CaseComment by CaseComment 记录级别的基础上进行,因为任何给定的案例都会有许多 CaseComments 都由不同的用户贡献

4

2 回答 2

1

你可以通过几种方式做到这一点(我认为)。

如果您想走纯编程路线,请查看此处讨论使用共享对象以允许与特定用户或组共享记录。

否则,如果可能的话,您可以使用角色和层次结构管理来组织它,以便只有特定级别或更高级别的特定角色中的人才能看到并访问记录?

保罗

更新:

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

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}

我没有测试或尝试过,所以你会想要调整它,但这应该是一般的想法。

保罗

于 2011-06-16T15:26:49.377 回答
0

看看下面的网址。

https://developer.salesforce.com/forums/?id=906F00000008w0gIAA

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

SELECT RecordId, [HasReadAccess, HasEditAccess, HasAllAccess, MaxAccessLevel] FROM UserRecordAccess
WHERE UserId = [single ID]
AND RecordId = [single ID] 
//or Record IN [list of IDs]
于 2017-11-21T12:14:04.540 回答