Memos About Salesforce

Salesforceにハマってたこと!

apex insufficient access rights on object id またエラー

f:id:jude2016:20190805144057j:plain
悩む
こんにちは、管理人の@Salesforce.Zです。 権限のエラーのようですね。エラーになって、うれしくないかもしれませんが、実は成長に一番つながることで、大事な経験です。いっぱい遭いましょうPP。 System.DmlException: Update failed. First exception on row 0 with id xxxxxxxxxxxxxxxxxx; first error: INSUFFICIENT_ACCESS_OR_READONLY, insufficient access rights on object id: [] INSUFFICIENT_ACCESS_OR_READONLY You can't perform the specified action because you do not have sufficient permissions. 十分な権限を持っていないため、指定されたアクションを実行することはできません。 プロファイルをチェックし権限は付与されていたのに。。。。。。

読んだら得ること

★ insufficient access rights on object idのトラブルシューティングとその対策

目次

権限エラー

Salesforceの権限問題って、やや複雑なので、確認するポイントも複数あり

1つ1つ確認し、排除法なども用いて、だんだん、わかってくるはず。

大体は、以下になります

  • プロファイル

  • 権限セット

  • 共有設定

複雑と言いながら、確認場所はこんなもんですね。

しかし、項目レベルか、レコードレベルか、オブジェクトレベルかによって確認するところも変わってくるので

経験に依存し、現在のエラーはどんなレベルかを推測できたら、いいですね。

ちょい拡張

権限セットはプロファイルとほぼ同じ、プロファイルの権限を拡張するには使うもん

共有設定はレコードレベルの権限拡張です。

よくあるパターン

共有設定で参照できないレコードを、triggerで設定していた

非公開のオブジェクトにしているのに、権限を顧慮していないプログラムの実装になっている

普段のプログラム

with sharing キーワードでは、クラスで現在のユーザの共有ルールを考慮するように指定できます。Apex コードはシステムコンテキストで実行されるため、このキーワードはクラスで明示的に設定する必要があります。システムコンテキストでは、Apex コードはすべてのオブジェクトと項目にアクセスできます。オブジェクト権限、項目レベルセキュリティ、共有ルールは現在のユーザには適用されません。この戦略により、ユーザには非表示の項目またはオブジェクトが原因でコードの実行が失敗することを避けることができます。このルールの唯一の例外は、executeAnonymous コールおよび Chatter in Apex と共に実行される Apex コードです。executeAnonymous は常に、現在のユーザのフル権限を用いて実行されます。

共有ルールを強制実行する例

現在のユーザに適用されている共有ルールを強制実行するには、クラスの宣言時に with sharing キーワードを使用します

public with sharing class sharingClass {

// Code here

}

共有ルールを強制実行されない例

現在のユーザに適用されている共有ルールを強制実行されないようにするには、クラスの宣言時に without sharing キーワードを使用します

public without sharing class noSharing {

// Code here

}

終わりに

参照リファレンス