この質問に投稿されたコードを修正しようとしています
その投稿でわかるように、Case のタブ付きコンテンツを含む Visualforce ページのカスタム コントローラーがあります。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>
残念ながら、updateable のテストはオブジェクト レベルで行われるため、現在のユーザーが任意の CaseComment を編集する権限を持っている場合、すべての CaseComments で true が返されます。
現在のユーザーが特定の行を変更できる場合にのみ編集アクションを表示するには、レコード レベルの検証が必要です。
何か案は?
更新 質問を読み直したところ、本来あるべきほど明確ではなかったことがわかりました。
CaseComments のセットを反復処理するとき、特定の Case について、現在のユーザーが「権限のないページ」を表示せずに特定の CaseComment を安全に編集できるかどうかを知る必要があります。このテストは、CaseComment ごとに CaseComment レコード レベルで行う必要があります。これは、特定の Case には、すべてが異なるユーザーによって提供された多数の CaseComment があるためです。