Comment vérifier l'utilisateur CRUD des autorisations pour un objet Salesforce?
Selon une exigence, je dois changer le propriétaire d'un compte si l'utilisateur n'a pas accès en lecture à un troisième objet.
J'ai besoin d'une fonctionnalité similaire à la isAccessible()
méthode de Décrire le Résultat de Champ, mais il n'est disponible que pour la session courante de l'utilisateur.
Est-il un autre moyen de vérifier que l'utilisateur du CRUD des autorisations pour un objet dans le code Apex?
Avez-vous jamais trouver une solution à cela?
OriginalL'auteur ntnng | 2012-05-09
Vous devez vous connecter pour publier un commentaire.
J'ai écrit un article à ce sujet sur mon blog. Il est une fonctionnalité qui vient de sortir en version 24.0 de l'API (Version de Printemps) qui vous permettra de faire exactement cela sur un enregistrement par enregistrement de base pour l'utilisateur actuel.
Voici le lien vers cette entrée de blog qui va dans les détails: Comment savoir si un utilisateur a accès à un dossier
OriginalL'auteur John De Santiago
Ne pas confondre le niveau record d'accès avec CRUD - le second est la possibilité pour un utilisateur de Créer, Lire, mise à Jour ou Supprimer un objet en général, indépendamment des règles de partage de l'etc. qui pourraient affecter l'accès de l'utilisateur à un dossier en particulier.
Pour vérifier si un utilisateur peut créer (par exemple, Contacts) en général, il suffit d'utiliser
(renvoie
true
oufalse
)OriginalL'auteur Alexander Sascha Kerschhofer
De la documentation. il semble que vous souhaitez utiliser exécuter de façon anonyme.
Apex généralement exécuté dans le contexte du système; c'est, le courant des autorisations de l'utilisateur, la sécurité au niveau des champs, et des règles de partage ne sont pas prises en compte lors de l'exécution de code. Les seules exceptions à cette règle sont les Apex code qui est exécuté avec la executeAnonymous appel. executeAnonymous s'exécute toujours à l'aide de la totalité des autorisations de l'utilisateur actuel. Pour plus d'informations sur executeAnonymous, de voir des Blocs.
Bien que l'Apex ne pas appliquer au niveau de l'objet et champ des autorisations de niveau par défaut, vous pouvez appliquer ces autorisations dans votre code en appelant explicitement les sObject décrire le résultat de méthodes (de Schéma.DescribeSObjectResult) et le champ de décrire le résultat de méthodes (de Schéma.DescribeFieldResult) vérifier le courant à l'accès de l'utilisateur des niveaux d'autorisation. De cette façon, vous pouvez vérifier si l'utilisateur possède les autorisations nécessaires, et seulement si, il ou elle possède les autorisations nécessaires, vous pouvez ensuite effectuer une opération DML ou d'une requête.
Par exemple, vous pouvez appeler le isAccessible, isCreateable, ou isUpdateable méthodes de Schéma.DescribeSObjectResult pour vérifier si l'utilisateur actuel est de lire, de créer ou de mettre à jour l'accès à un sObject, respectivement. De Même, Le Schéma.DescribeFieldResult expose ces méthodes de contrôle d'accès que vous pouvez appeler pour vérifier le courant à l'utilisateur de lire, de créer, ou de la mise à jour de l'accès d'un champ. En outre, vous pouvez appeler le isDeletable méthode prévue par le Schéma.DescribeSObjectResult pour vérifier si l'utilisateur a l'autorisation de supprimer un spécifique sObject.
http://www.salesforce.com/us/developer/docs/apexcode/index_Left.htm#StartTopic=Content/apex_classes_perms_enforcing.htm#kanchor431
OriginalL'auteur user11235813
Avez-vous essayé le runAs() méthode?
Quelque chose comme (non vérifié):
OriginalL'auteur Hraefn
La DescribeSObjectResult classe possède des méthodes pour la vérification de CRUD.
E. g. cela vous permet de tester si oui ou non l'utilisateur actuel peut mettre à jour le compte de l'objet en général.
@John De Santiago: votre article couvre le niveau record de l'accès, plutôt que de l'objet CRUD (= niveau de l'objet de l'accès)
OriginalL'auteur user11276