Wie Sie die Benutzer CRUD-Berechtigungen für ein Objekt in Salesforce?
Gemäß einer Anforderung, die ich habe zu ändern, der Besitzer des Accounts, wenn der Benutzer kein Lesezugriff auf ein drittes Objekt.
Brauche ich eine ähnliche Funktionalität wie die isAccessible()
Methode Beschreiben Feld Führen, aber es ist nur verfügbar für den aktuellen angemeldeten Benutzer.
Gibt es eine andere Möglichkeit zu überprüfen, die Benutzer CRUD-Berechtigungen für ein Objekt in Apex-code?
- Hast du jemals eine Lösung finden?
InformationsquelleAutor ntnng | 2012-05-09
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schrieb ich einen Artikel darüber auf meinem blog. Es ist ein feature, das wurde soeben in der version 24.0 von der API (Spring Version), mit denen Sie genau das tun auf einem von einem Datensatz die Grundlage für den aktuellen Benutzer.
Hier ist der link zu diesem blog-Eintrag, der ins Detail geht: How to tell wenn ein Benutzer hat Zugriff auf einen Datensatz
Nicht zu verwechseln mit der record level access mit CRUD - die letztere ist die Fähigkeit für einen Benutzer zu Erstellen, Lesen, Update oder Löschen ein Objekt im Allgemeinen, unabhängig davon, zu teilen, Regeln, usw. das könnte Auswirkungen auf die Benutzer Zugriff auf einen bestimmten Datensatz.
Um zu überprüfen, ob ein Benutzer erstellen kann (z.B. Kontakte) im Allgemeinen, verwenden Sie einfach
(zurück
true
oderfalse
)Aus der Dokumentation. es klingt wie Sie möchten, verwenden Sie execute anonym.
Apex läuft in der Regel im system-Kontext; das heißt, der Berechtigungen des aktuellen Benutzers, field-level-security und sharing-Regeln nicht berücksichtigt, während der code-Ausführung. Die einzigen Ausnahmen von dieser Regel sind Apex-code, der ausgeführt wird, mit der executeAnonymous nennen. executeAnonymous wird immer mit den vollen Berechtigungen des aktuellen Benutzers. Für weitere Informationen über executeAnonymous, siehe Anonyme Blöcke.
Obwohl die Spitze nicht durchsetzen Objekt-Ebene und Feld-level-Berechtigungen standardmäßig, Sie können erzwingen diese Berechtigungen im code durch explizites aufrufen der sObject beschreiben, Ergebnis-Methoden (von Schema.DescribeSObjectResult) und das Feld beschreiben, Ergebnis-Methoden (von Schema.DescribeFieldResult) überprüfen Sie, dass der aktuelle Benutzer Zugriff Berechtigungsstufen. Auf diese Weise können Sie überprüfen, ob der aktuelle Benutzer über die erforderlichen Berechtigungen verfügen, und nur, wenn er oder Sie über ausreichende Berechtigungen verfügen, können Sie dann eine bestimmte DML-operation oder einer Abfrage.
Zum Beispiel, können Sie rufen Sie die isAccessible, isCreateable, oder isUpdateable Methoden des Schema.DescribeSObjectResult, um zu überprüfen, ob der aktuelle Benutzer Lesen, erstellen oder aktualisieren Sie den Zugriff auf ein sObject, beziehungsweise. Ebenso Schema.DescribeFieldResult macht, die diese access-control-Methoden, die Sie aufrufen können, um zu überprüfen, die der aktuelle Benutzer Lesen, erstellen oder aktualisieren Sie den Zugriff für ein Feld. Darüber hinaus können Sie rufen Sie die isDeletable Methode nach Schema.DescribeSObjectResult prüfen, ob der aktuelle Benutzer über die Berechtigung zum löschen einer bestimmten sObject.
http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#StartTopic=Content/apex_classes_perms_enforcing.htm#kanchor431
Haben Sie versucht, die runAs() Methode?
Etwas wie (nicht überprüft):
Den DescribeSObjectResult-Klasse verfügt über Methoden zur Prüfung von CRUD.
E. g. dies können Sie testen, ob oder nicht die aktuellen Nutzer können das update das account-Objekt im Allgemeinen.
@John De Santiago: dein Artikel befasst sich mit der record-level-access-eher als Objekt-CRUD - (= Objekt-level-Zugriff)