1

这更像是一个最佳实践问题。我们的组织目前对自定义对象的组织范围默认设置具有“公共读取”权限。我们不能将其保密,因为它现在为内部员工工作的方式,或者更确切地说,我们正试图避免这种情况。

我还在创建一个带有自定义视觉强制页面的客户门户……我在其中使用 SOQL 查询显示数据。

在 SOQL 查询中添加一个子句以仅返回帐户 ID 与登录用户的帐户 ID 匹配的那些记录是个好主意吗?

我做到了,而且效果很好……但是这种方法有什么我忽略的陷阱吗?

谢谢,卡尔文

4

1 回答 1

7

根据Visualforce 文档

由于标准控制器在用户模式下执行,其中强制执行当前用户的权限、字段级安全性和共享规则,因此扩展标准控制器允许您构建尊重用户权限的 Visualforce 页面。虽然扩展类在系统模式下执行,但标准控制器在用户模式下执行。与自定义控制器一样,您可以指定用户是否可以根据用户的配置文件执行控制器扩展中的方法。

我相信这个想法是,只要你的类是public with sharing那么权限就应该被强制执行,并且不应该返回用户看不到的记录(与记录上的字段相同)。

根据Apex 文档

Apex 通常在系统上下文中运行;也就是说,当前用户的权限、字段级别的安全性和共享规则在代码执行过程中不会被考虑在内。

with sharing在声明类时使用关键字来强制执行适用于当前用户的共享规则。例如:

public with sharing class sharingClass {

// Code here 


}

声明类时使用without sharing关键字以确保不强制执行当前用户的共享规则。例如:

public without sharing class noSharing {

// Code here 


}

否则,您将不得不花费数小时确保在正确的时间为正确的用户应用正确的权限。它几乎完全违背了visualforce页面的目的!

于 2012-05-07T22:30:57.157 回答