Permissions 如何检查用户';Salesforce中对象的CRUD权限?

Permissions 如何检查用户';Salesforce中对象的CRUD权限?,permissions,salesforce,crud,apex-code,Permissions,Salesforce,Crud,Apex Code,根据要求,如果用户没有对第三个对象的读取权限,我必须更改帐户的所有者 我需要一个类似于描述字段结果的isAccessible()方法的功能,但它仅适用于当前登录的用户 是否有其他方法检查用户对Apex代码中对象的CRUD权限?来自文档。听起来你想匿名执行 Apex通常在系统上下文中运行;也就是说,在代码执行期间不考虑当前用户的权限、字段级安全性和共享规则。​ 此规则的唯一例外是使用executeAnonymous调用执行的Apex代码。ExecuteAnyMous始终使用当前用户的完全权限执行。

根据要求,如果用户没有对第三个对象的读取权限,我必须更改帐户的所有者

我需要一个类似于描述字段结果的
isAccessible()
方法的功能,但它仅适用于当前登录的用户


是否有其他方法检查用户对Apex代码中对象的CRUD权限?

来自文档。听起来你想匿名执行

Apex通常在系统上下文中运行;也就是说,在代码执行期间不考虑当前用户的权限、字段级安全性和共享规则。​ 此规则的唯一例外是使用executeAnonymous调用执行的Apex代码。ExecuteAnyMous始终使用当前用户的完全权限执行。有关executeAnonymous的更多信息,请参见匿名块

虽然默认情况下Apex不强制执行对象级和字段级权限,但您可以通过显式调用sObject描述结果方法(属于Schema.DescribeObjectResult)和字段描述结果方法(属于Schema.DescribeFieldResult)在代码中强制执行这些权限检查当前用户的访问权限级别。通过这种方式,您可以验证当前用户是否具有必要的权限,并且只有当他或她具有足够的权限时,您才能执行特定的DML操作或查询

例如,您可以调用Schema.DescribeSObjectResult的isAccessible、IsCreatable或isUpdateable方法,以验证当前用户是否分别具有对sObject的读取、创建或更新访问权限。类似地,Schema.DescribeFieldResult公开了这些访问控制方法,您可以调用这些方法来检查当前用户对字段的读取、创建或更新访问。此外,您还可以调用Schema.DescribeSObjectResult提供的IsDeleteTable方法来检查当前用户是否具有删除特定sObject的权限

你试过这个方法吗

类似于(未验证):


我在我的博客上写了一篇关于这个的文章。API的24.0版(Spring Release)中刚刚发布了一个功能,它允许您为当前用户逐个记录地执行此操作


下面是该博客的链接,详细介绍如下:

不要将记录级访问与CRUD混淆-后者是用户创建、读取、更新或删除对象的能力,不管共享规则等是否会影响用户对特定记录的访问

要检查用户是否可以创建(例如联系人),只需使用

Schema.sObjectType.Contact.isCreateable()

(返回
true
false

DescribeSObjectResult类具有检查CRUD的方法

例如,这允许您测试当前用户是否可以更新account对象

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

@John De Santiago:您的文章介绍了记录级访问,而不是对象级访问。此后,SF添加查询对象权限的选项:

    Select SobjectType ,ParentId, PermissionsEdit, PermissionsRead 
From ObjectPermissions
Order by ParentID, SobjectType ASC
基本上,您需要获取要检查的用户的概要文件和权限集以及相关对象。因此,它将类似于:

Select SobjectType ,ParentId, PermissionsEdit, PermissionsRead 
From ObjectPermissions
where parentId IN :UserProfileIdAndPermission
AND sObjectType=:objectType
Order by ParentID, SobjectType ASC

我的问题是这样的。我有两个对象A和B。如果记录的所有者没有对B对象的读取权限,则将所有者更改为某个预定义用户。Schema.DescribeSObjectResult的方法仅显示当前用户是否有权访问sObject。我想要类似isAccessible的方法,但是显示除当前用户之外的其他用户的访问权限。谢谢回复。runas方法只能在测试方法中使用。我需要检查一个类中的用户访问权限。你有没有找到解决方案?
Select SobjectType ,ParentId, PermissionsEdit, PermissionsRead 
From ObjectPermissions
where parentId IN :UserProfileIdAndPermission
AND sObjectType=:objectType
Order by ParentID, SobjectType ASC