Salesforce: Как отобразить апекс только в том случае, если текущий пользователь имеет разрешение на обновление текущей записи. Рекордный уровень безопасности - PullRequest
0 голосов
/ 16 июня 2011

Я пытаюсь исправить свой код, опубликованный для этого вопроса 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>

К сожалению, тест на обновляемостьна уровне объекта, поэтому он возвращает true для всех CaseComments, если текущий пользователь имеет разрешение на редактирование любого CaseComment.

Мне нужна проверка уровня записи, чтобы показать действие «Редактировать» только в том случае, если конкретный ряд может быть изменен текущим пользователем.

Есть идеи?

Обновление Перечитывая свой вопрос, я вижу, что он не так понятен, как следовало бы.

Поскольку я перебираю набор CaseComments, для данного Case мне нужно знать, может ли текущий пользователь безопасноотредактируйте конкретный CaseComment, не видя «у вас нет страницы разрешения».Этот тест должен проводиться на основе уровня записей CaseComment на уровне записей CaseComment, поскольку в каждом конкретном случае будет много CaseComments, представленных разными пользователями

Ответы [ 2 ]

1 голос
/ 16 июня 2011

Вы можете сделать это несколькими способами (я думаю).

Если вы хотите пойти по чисто программному маршруту, тогда посмотрите здесь , в котором обсуждается использование объекта совместного использования, чтобы разрешить обмен записями с конкретными пользователями или группами.

В противном случае, если это возможно, вы можете использовать управление ролями и иерархией, чтобы организовать это таким образом, чтобы только люди, находящиеся в определенной роли определенного уровня или выше, могли видеть запись и получать к ней доступ?

Пол

Обновление:

Исходя из вашего комментария ниже, я думаю, что вы хотите использовать совместное использование Apex. Если вы посмотрите на эту полезную вики developerforce , вы увидите, что вам нужно получить доступ к объекту общего доступа, чтобы проверить, есть ли у пользователя запись в этом объекте для просмотра конкретного экземпляра записи. Что-то вроде:

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}

Я не проверял и не пробовал это, так что вы захотите настроить его, но это должно быть общей идеей.

Пол

0 голосов
/ 21 ноября 2017

Посмотрите на приведенный ниже URL.

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...