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ページの目的をほぼ完全に打ち負かします!
こんにちはマイク、この素晴らしい返信をありがとう。私は私のコントローラクラス宣言で "共有"キーワードを使用しています。 orgポータル全体のデフォルト設定は、Customerポータルに表示する必要があるカスタムオブジェクトにパブリックです。したがって、ユーザーがレポートページを表示すると、デフォルトですべてのレコードを見ることができます。私が設定で他に何をして、ユーザーが彼と同じアカウントに属していないレコードも見ることができないことを保証するために。これは私の本当の問題でした。私はかなりの文書を読んでいます。しかし、私たちの共有モデルでは、それは大きな課題でした。 –
私は、Salesforce CRMのカスタマーポータル部分がどのように機能しているかに精通していません。私たちはそれを使用していますが、限られた能力で、私はそれに取り組む必要はありませんでした。しかし、私はあなたが適切なプロファイル/ロール/権限を持つこれらのオブジェクトをロックすることをお勧めします。そのため、ポータル内でさえも、すべてのものすべてにアクセスすることはできません。そうしないと、レコードを表示する前に手動で権限のチェックを強制することになります。 –
ありがとうマイク...私はセキュリティ設定の変更を終了し、大量のポータルユーザーライセンスを使用しました。彼らはアカウントのレコード使用を制限するために、デフォルトの設定を持っています。 –