要件によると、ユーザーが 3 番目のオブジェクトへの読み取りアクセス権を持っていない場合、アカウントの所有者を変更する必要があります。
Describe Field Resultのメソッドと同様の機能が必要isAccessible()
ですが、現在ログインしているユーザーのみが利用できます。
Apex コード内のオブジェクトに対するユーザの CRUD 権限を確認する他の方法はありますか?
要件によると、ユーザーが 3 番目のオブジェクトへの読み取りアクセス権を持っていない場合、アカウントの所有者を変更する必要があります。
Describe Field Resultのメソッドと同様の機能が必要isAccessible()
ですが、現在ログインしているユーザーのみが利用できます。
Apex コード内のオブジェクトに対するユーザの CRUD 権限を確認する他の方法はありますか?
これについてはブログに記事を書きました。API のバージョン 24.0 (Spring Release) でリリースされたばかりの機能があり、現在のユーザーのレコードごとにこれを行うことができます。
詳細を説明するブログエントリへのリンクは次のとおりです。ユーザーがレコードにアクセスできるかどうかを確認する方法
DescribeSObjectResult クラスには、CRUD をチェックするためのメソッドがあります。
たとえば、これにより、現在のユーザーが一般的にアカウント オブジェクトを更新できるかどうかをテストできます。
Schema.DescribeSObjectResult drSObj = Schema.sObjectType.Account;
Boolean thisUserMayUpdate = drSObj.isUpdateable();
@John De Santiago: あなたの記事は、オブジェクト CRUD (= オブジェクト レベル アクセス) ではなく、レコード レベル アクセスをカバーしています。
runAs()メソッドを試しましたか?
次のようなもの (検証されていません):
User u = [SELECT Id FROM User WHERE Name='John Doe'];
System.runAs(u) {
if (Schema.sObjectType.Contact.fields.Email.isAccessible()) {
// do something
}
}
ドキュメントから。execute anonymously を使用したいようです。
Apex は通常、システム コンテキストで実行されます。つまり、現在のユーザの権限、項目レベルのセキュリティ、および共有ルールは、コードの実行時に考慮されません。 このルールの唯一の例外は、executeAnonymous コールで実行される Apex コードです。executeAnonymous は常に、現在のユーザーの完全な権限を使用して実行されます。executeAnonymous の詳細については、匿名ブロックを参照してください。
デフォルトでは、Apex はオブジェクトレベルおよび項目レベルの権限を適用しませんが、(Schema.DescribeSObjectResult の) sObject 記述結果メソッドと (Schema.DescribeFieldResult の) 項目記述結果メソッドを明示的にコールすることにより、コードでこれらの権限を適用できます。 ) 現在のユーザーのアクセス許可レベルをチェックします。このようにして、現在のユーザーが必要な権限を持っているかどうかを確認し、十分な権限を持っている場合にのみ、特定の DML 操作またはクエリを実行できます。
たとえば、Schema.DescribeSObjectResult の isAccessible、isCreateable、または isUpdateable メソッドを呼び出して、現在のユーザーが sObject への読み取り、作成、または更新アクセス権をそれぞれ持っているかどうかを確認できます。同様に、Schema.DescribeFieldResult は、フィールドに対する現在のユーザーの読み取り、作成、または更新アクセスを確認するために呼び出すことができるこれらのアクセス制御メソッドを公開します。さらに、Schema.DescribeSObjectResult によって提供される isDeletable メソッドを呼び出して、現在のユーザーが特定の sObject を削除する権限を持っているかどうかを確認できます。