2012-05-09 26 views
9

要件に応じて、ユーザーが3番目のオブジェクトへの読み取りアクセス権を持っていない場合は、アカウントの所有者を変更する必要があります。SalesforceでオブジェクトのユーザーのCRUD権限を確認するにはどうすればよいですか?

Describe Field ResultのisAccessible()メソッドと似た機能が必要ですが、現在ログインしているユーザーのみが利用できます。

ApexコードでオブジェクトのユーザーのCRUD権限を確認する他の方法はありますか?

+1

をカバー? – turbo2oh

答えて

0

ドキュメントから。匿名で実行するように思えます。

通常、Apexはシステムコンテキストで実行されます。つまり、現在のユーザーのアクセス許可、フィールドレベルのセキュリティ、および共有ルールはコード実行中に考慮されません。このルールの例外はexecuteAnonymous呼び出しで実行されるApexコードだけです。 executeAnonymousは、常に現在のユーザーの全権限を使用して実行されます。 executeAnonymousの詳細については、「匿名ブロック」を参照してください。

Apexでは、デフォルトでオブジェクトレベルとフィールドレベルのアクセス許可が適用されませんが、(Schema.DescribeSObjectResultの)sObject記述結果メソッドと、フィールド記述メソッドを明示的に呼び出すことによって、現在のユーザーのアクセス許可レベルをチェックするSchema.DescribeFieldResult)この方法で、現在のユーザーに必要な権限があるかどうかを確認し、権限がある場合にのみ、特定のDML操作または問合せを実行できます。

たとえば、Schema.DescribeSObjectResultのisAccessible、isCreateable、またはisUpdateableの各メソッドを呼び出して、現在のユーザーがsObjectへのアクセスをそれぞれ読み取り、作成または更新しているかどうかを確認できます。同様に、Schema.DescribeFieldResultは、フィールドの現在のユーザーの読み取り、作成、または更新のアクセスを確認するために呼び出すことができる、これらのアクセス制御メソッドを公開します。また、Schema.DescribeSObjectResultが提供するisDeletableメソッドを呼び出して、現在のユーザーに特定のsObjectを削除する権限があるかどうかを確認できます。

http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#StartTopic=Content/apex_classes_perms_enforcing.htm#kanchor431

+0

私の問題はこのようなものです。私は2つのオブジェクトAとBを持っています。Aレコードの所有者がBオブジェクトへの読み取りアクセス権を持っていない場合は、所有者を事前定義されたユーザーに変更してください。 Schema.DescribeSObjectResultのメソッドは、現在のユーザーがsObjectにアクセスできるかどうかのみを示します。私はisAccessibleメソッドのようなものを望みましたが、現在のユーザー以外のユーザーのアクセスを示しています。 – ntnng

0

あなたが方法を試してみましたか?

ような何か(検証されていない):

User u = [SELECT Id FROM User WHERE Name='John Doe']; 

System.runAs(u) { 
    if (Schema.sObjectType.Contact.fields.Email.isAccessible()) { 
    // do something 
    } 
} 
+2

返事をありがとう。 runasメソッドは、テストメソッドでのみ使用できます。クラスのユーザーアクセスを確認する必要があります。 – ntnng

5

私は私のブログにこの記事を書きました。 API(バージョリリース)のバージョン24.0でちょうどリリースされた機能があります。これにより、現在のユーザーのレコードベースでこれを行うことができます。ここで

は細部に入ることブログエントリへのリンクです:CRUDとレコードレベルのアクセスを混同しないでくださいHow to tell if a user has access to a record

2

- 、後者は、ユーザーのための能力であるを作成読むまたはを削除することは、共有ルールなどに関係なく、特定のレコードへのユーザーのアクセスに影響する可能性があります。

ユーザーが作成できるかどうかを確認する(例:一般的に、連絡先)が、ちょうど

Schema.sObjectType.Contact.isCreateable() 

(DescribeSObjectResultにクラスがCRUDをチェックするための方法を持っている

0

trueまたはfalseを返します。

など。現在のユーザーが一般的にアカウントオブジェクトを更新できるかどうかをテストできます。

Schema.DescribeSObjectResult drSObj = Schema.sObjectType.Account; 
Boolean thisUserMayUpdate = drSObj.isUpdateable(); 

@ジョン・デ・サンティアゴ:あなたの記事はあなたがこれに対する解決策を見つけるか、レコードレベルのアクセスではなく、オブジェクトのCRUD(=オブジェクト・レベルのアクセス)

関連する問題