我有一个自定义对象,其中包含一个主机细节。有没有办法确定用户在查询此自定义对象时是否具有读取或读/写访问权限?
为了澄清我的需求,我正在寻找一种方法来呈现我的页面(非视觉力),明确区分他们只有读取权限的记录和可以编辑的记录。
答案 0 :(得分:1)
用户将拥有与机会相同的访问权限。 Profile
对象公开了权限,但它似乎不允许您查找有关对象的CRUD设置。
您是在创建集成件还是使用Visualforce?如果您正在使用Visualforce,则界面将自动遵守安全控件,隐藏不允许查看的数据,并且只有在使用<apex:inputField>
时才会读取字段,如果他们没有写入字段的权限。
**编辑** 也许有人会有更好的解决方案,但是如何尝试更新您查询的记录,存储每个是成功还是失败,然后使用它来控制界面?有点黑客,如果我发现其他任何东西,我一定会更新。
**编辑25/01/2012 ** 刚刚遇到过这个问题:http://www.salesforce.com/us/developer/docs/api/index_Left.htm#StartTopic=Content/sforce_api_objects_userrecordaccess.htm?SearchType=Stem
非常确定这将“完全满足您的需求!”
答案 1 :(得分:1)
这可能包含您的问题http://salesforceblogger.blogspot.com/2012/04/query-user-access-level-in-apex.html
的答案有一个使用API 24.0公开的UserRecordAccess表,您可以使用该表轻松检查访问权限,而不是使用共享对象敲打头部。
答案 2 :(得分:0)
我不知道如何查询以查找访问级别,但是如果您的顶点类使用With Sharing关键字,它将尊重对象的共享,因此当您尝试更新数据时,您将得到一个您可以捕获的DML异常。
如果您没有使用With Sharing,那么apex不会尊重共享模式,从技术上讲,即使用户没有访问权限,用户也可以更新数据。
正如LaceySnr所指出的,如果您使用visualforce,<apex:inputfield>
元素将自动显示给用户,如果他们只有ReadOnly Access。