- リンクを取得
- ×
- メール
- 他のアプリ
- リンクを取得
- ×
- メール
- 他のアプリ
UserRecordAccess オブジェクトを使用してレコード編集権限を確認する方法
Apexでレコードに対するユーザーの編集権限を確認するためには、UserRecordAccess
オブジェクトを活用するのが最適です。このオブジェクトは、特定のレコードに対する現在のユーザーのアクセス権を簡単に確認できる便利なツールです。
基本的なクエリ構文
- 単一レコードの編集権限を確認する場合:
SELECT RecordId, HasEditAccess FROM UserRecordAccess WHERE UserId = :UserInfo.getUserId() AND RecordId = :recordId
RecordId
:対象となるレコードのID。HasEditAccess
:現在のユーザーがレコードを編集できる場合はtrue
、それ以外はfalse
。
- 複数レコードの編集権限をバッチで確認する場合:
List<Id> recordIds = new List<Id>{'a0123456789ABCDE', 'a1123456789FGHIJ', 'a2123456789KLMNO'}; List<UserRecordAccess> accessRecords = [ SELECT RecordId, HasEditAccess FROM UserRecordAccess WHERE UserId = :UserInfo.getUserId() AND RecordId IN :recordIds ]; for (UserRecordAccess ura : accessRecords) { System.debug('Record ID: ' + ura.RecordId + ', Can Edit: ' + ura.HasEditAccess); }
recordIds
:チェックしたいレコードのIDリスト(200件まで)。HasEditAccess
:各レコードに対する編集権限の有無を返します。
注意点
最大200件の制限
UserRecordAccess
を使用する際、1回のクエリで最大200件のレコードIDしか確認できません。この制限を超える場合は、バッチ処理などの工夫が必要です。リストの型
RecordId IN :allRecordIds
で渡すIDリストは必ずList
型で指定してください。Set
型ではエラーになります。利用可能なフィールド
HasReadAccess
:読み取り権限の有無HasEditAccess
:編集権限の有無HasDeleteAccess
:削除権限の有無HasTransferAccess
:移行権限の有無HasAllAccess
:すべての権限の有無
シナリオ:Visualforceページでの実装例
以下は、Visualforceページで複数のレコードに対して「編集」ボタンを動的に表示する例です。
Apexクラス
public with sharing class RecordAccessController { @AuraEnabled public static List<Wrapper> getRecordsWithAccess(List<Id> recordIds) { List<UserRecordAccess> accessList = [ SELECT RecordId, HasEditAccess FROM UserRecordAccess WHERE UserId = :UserInfo.getUserId() AND RecordId IN :recordIds ]; Map<Id, Boolean> accessMap = new Map<Id, Boolean>(); for (UserRecordAccess access : accessList) { accessMap.put(access.RecordId, access.HasEditAccess); } List<Wrapper> wrappers = new List<Wrapper>(); for (Id recordId : recordIds) { wrappers.add(new Wrapper(recordId, accessMap.get(recordId))); } return wrappers; } public class Wrapper { @AuraEnabled public Id recordId; @AuraEnabled public Boolean canEdit; public Wrapper(Id recordId, Boolean canEdit) { this.recordId = recordId; this.canEdit = canEdit; } } }
Visualforceページ
<apex:page controller="RecordAccessController" id="page"> <apex:form> <apex:repeat value="{!records}" var="record"> <div> Record ID: {!record.recordId} <apex:commandButton action="{!editAction}" value="Edit" rendered="{!record.canEdit}" /> </div> </apex:repeat> </apex:form> </apex:page>
まとめ
UserRecordAccess
オブジェクトを使用すれば、特定ユーザーのレコード権限を簡単にチェックでき、クエリの制限を考慮しつつ効率的に権限管理を行うことが可能です。VisualforceページやLightning Web Componentsでの活用にも適しています。
コメント
コメントを投稿