2012-05-07 6 views
1

これはベストプラクティスの問題です。私たちの組織は現在、カスタムオブジェクトの組織全体のデフォルトで「公開読み取り」権限を持っています。内部の従業員のために働いているか、あるいはこれを避けようとしているため、私たちはこれを非公開にすることはできません。Salesforce:セキュリティを強化し、レコードアクセスを制限するためにSOQLを使用することをお勧めしますか?

カスタム視覚力ページを持つカスタマーポータルも作成しています。ここでは、SOQLクエリを使用してデータを表示します。

アカウントIDがログインしているユーザーのacount IDと一致するレコードのみを返すようにSOQLクエリに句を追加することをお勧めしますか?

私はそれを行いました。それはうまくいきます...しかし、私が見落としているこの方法の落とし穴はありますか?

おかげで、 カルバンパー

答えて

6

Visualforce Documentation

標準コントローラは、現在の ユーザーの 権限、フィールドレベルのセキュリティ、および共有ルールが適用されている、ユーザーモードで実行されるため標準コントローラを拡張することで、ユーザ権限を尊重するVisualforceページを に構築することができます。 拡張クラスはシステムモードで実行されますが、標準コントローラ はユーザーモードで実行されます。カスタムコントローラーの場合と同様に、ユーザーが に基づいてコントローラー拡張でメソッドを実行できるかどうかを と指定できます。

私がいる限り、あなたのクラスはpublic with sharingその後、権限が施行されるべきであり、レコードは、ユーザーが(レコードのフィールドと同じ)を見ることができない返却すべきではないとして、アイデアビーイングを信じています。エイペックスは、一般に、システムコンテキストで実行さApex Documentation

当たり

。つまり、現在のユーザーの 権限、フィールドレベルのセキュリティ、および共有ルールは、コード実行中に アカウントに取り込まれません。

現在のユーザーに適用される共有ルールを強制するクラスを宣言するときwith sharingキーワードを使用します。例:現在のユーザの共有ルールが適用されていないことを確認するために、クラスの宣言時に

public with sharing class sharingClass { 

// Code here 


} 

without sharingキーワードを使用します。たとえば:

public without sharing class noSharing { 

// Code here 


} 

そうしないと、あなたは右の権限が適切なユーザーのために正確に正しい時刻に適用されることを確保する時間を費やす必要があります。これは、Visualforceページの目的をほぼ完全に打ち負かします!

+0

こんにちはマイク、この素晴らしい返信をありがとう。私は私のコントローラクラス宣言で "共有"キーワードを使用しています。 orgポータル全体のデフォルト設定は、Customerポータルに表示する必要があるカスタムオブジェクトにパブリックです。したがって、ユーザーがレポートページを表示すると、デフォルトですべてのレコードを見ることができます。私が設定で他に何をして、ユーザーが彼と同じアカウントに属していないレコードも見ることができないことを保証するために。これは私の本当の問題でした。私はかなりの文書を読んでいます。しかし、私たちの共有モデルでは、それは大きな課題でした。 –

+1

私は、Salesforce CRMのカスタマーポータル部分がどのように機能しているかに精通していません。私たちはそれを使用していますが、限られた能力で、私はそれに取り組む必要はありませんでした。しかし、私はあなたが適切なプロファイル/ロール/権限を持つこれらのオブジェクトをロックすることをお勧めします。そのため、ポータル内でさえも、すべてのものすべてにアクセスすることはできません。そうしないと、レコードを表示する前に手動で権限のチェックを強制することになります。 –

+1

ありがとうマイク...私はセキュリティ設定の変更を終了し、大量のポータルユーザーライセンスを使用しました。彼らはアカウントのレコード使用を制限するために、デフォルトの設定を持っています。 –

関連する問題