Salesforce的数据权限机制 (2)

Salesforce的数据权限机制

④ Manual sharing:手动共享一条记录给其他人。Records 的拥有者给没有 Records 权限的用户授予该 Record 相应的读写权限。

 

3. 数据权限校验

当用户需要进入某条记录、运行报表、搜索等操作时,salesforce 会检查用户的权限。由于 salesforce 有着复杂的权限设定,会在权限设定更改时立即计算数据记录的权限,然后将结果保存起来。这样,当用户对记录操作时,不用在此时进行权限的计算(因为会使效率变慢),而是根据存储好的权限结果直接判断。

salesforce 主要使用三种数据表来管理各种权限设定:

对象记录表(Object Record Table):存储着数据记录

对象共享表(Object Sharing Table):存储着各个对象的共享权限,包括了各种权限设定:Role hierarchies, Sharing rules, Manual sharing等

用户组表(Group Maintenance Table):存储着各个用户和用户组的关系

当需要决定某个用户或用户组对于某条记录的权限时,会执行以下步骤:

在对象记录表中找到这条记录

在对象共享表中根据这条记录的ID找到存储于其中的共享权限

在用户组表中根据用户或组的ID找到对应的记录,然后在对象共享表中找到和该用户或组的ID相对应的共享权限

以上步骤执行完毕后,salesforce 便得到了该用户或用户组对于这条记录的权限。

 

4. 数据定义与存储

Salesforce的数据权限机制

Metadatas表:存储用户自定义的对象(Record)和对象所包含的字段(Field)的结构信息,不保存具体的数据。Metadata可以保证极大的灵活性,搭配着配置化平台使用。主要有两大类:

Objects Metadata表:存储对象的信息,主要字段包括:对象ID(ObjID),拥有这个对象的租户ID(OrgID),对象的名称(ObjName)等

Fields Metadata表:存储对象附带字段的信息,主要字段包括:字段ID(FieldID),拥有这个字段的租户ID(OrgID),对象ID(ObjID),字段的名称(FieldName),字段的数据类型(DataType),布尔字段表示这个字段是否需要被检索(IsIndexed)

Data表:存储用户定制的对象和对象所包含字段的数据。主要也是两大类:

Data表:存储Metadata表中定义的对象和字段所对应的数据,主要字段包括:全局唯一ID(GUID),租户ID(OrgID),对象ID(ObjID),存放对象名字的 Nature Name(例如:这行与会计对象有关,这行的 Nature Name 就可能是 "Account Name")。除了这些核心字段外,这个表还有名字从 Value0~Value500 这501个列来存储数据,而且这些列都是 varchar 格式来存储不同类型的数据,这个列也成为 flex 列。

Clob表:存储那些 CLOD(Character Large Object,字符大对象)数据,对象最大支持 32000 个字符。

Piovt表:也称"数据透视表",以去规范化格式存储那些用于特殊目的的数据,比如用于检索、唯一性和关系等。主要作用是提升处理这些特殊数据的读取性能。主要有五种Piovt表:

Index Piovt表:由于Data表中数据都是以flex列的形式存储,所有很难在Data表的基础上对数据进行检索,所以引入Index Piovt表来解决这个问题,系统运行时,将需要索引的数据从Data表同步至Index Piovt表中相对应的字段来方便检索。比如数据的类型是日期型的,那么它会被同步至Index Piovt表中的日期字段。

UniqueFields Piovt表:用于帮助系统在Data表中字段实现唯一性约束

Relationships Piovt表:提供了"Relationship"这个数据类型来支持定义多个对象之间的关系,此表方便和加速了"Relationship"数据读取的作用

NameDenorm表:是一个简单的数据表用于存储对象的ID(ObjID)和对象的实例的名字,主要让一些仅需获取名字的查询访问,让一些简单的查询无需访问规模庞大的Data表

FallbackIndex表:这个表记录所有对象的名字,免去成本高昂的 "UNION" 操作,从而加速查询 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgwgp.html