引用访问控制列表的制作方法

文档序号:19022068发布日期:2019-11-01 20:51阅读:196来源:国知局
引用访问控制列表的制作方法

许多存储系统通过访问控制列表来管理对存储内容的访问。访问控制列表为存储系统提供了一种用于控制对存储在数据库中的内容的访问的机制。例如,在对象层次结构(hierarchy)中,例如互连文件和文件夹的树中,层次结构内的每个对象(例如,每个文件夹、文件等)具有与特定对象一起存储的其自己的访问控制列表。用于每个对象的每个访问控制列表可以存储在每个对象的对象元数据中,或者可以存储在对象本身内。

在这样的对象层次结构中,子对象通常继承父对象的访问控制列表。因此,对访问控制列表的任何改变都需要改变对象层次结构中的用于每个后代对象的每个后代访问控制列表。此外,当改变特定子对象访问控制列表时,必须改变用于其后代对象的访问控制列表,但不需要改变用于其上代对象的访问控制列表。



技术实现要素:

本说明书描述了与管理访问控制列表有关的技术。

通常,本说明书中描述的主题的一个创新方面可以体现在包括访问用于多个对象的对象层次结构的动作的方法中,每个对象代表存储位置或文件之一,每个存储位置可以存储一个或多个从属存储位置或文件。对于每个对象,层次结构包括相应的节点。对于具有子对象的父对象的每个对象,层次结构包括将表示父对象的节点连接到表示子对象的节点的有向边,其中至少一个对象由根对象表示,并且至少一个对象由叶对象表示。对于不是访问控制列表根对象的每个对象,其中访问控制列表根对象是该对象拥有访问控制列表的对象,层次结构包括元数据,该元对象包括标识用于对象的访问控制列表并且由访问控制列表根对象拥有的访问控制列表标识符。对于不是访问控制列表根对象的每个对象,层次结构包括接收对用于特定对象的访问控制列表的更新,以及对于每个更新确定特定对象是否是访问控制列表根对象。对于被确定为访问控制列表根对象的特定对象的每个更新,层次结构包括更新由访问控制列表根对象拥有的访问控制列表。对于未被确定为访问控制列表根对象的特定对象的每个更新,层次结构包括基于更新和由用于节点的访问控制列表标识符引用的访问控制列表生成新的访问控制列表,以及向特定对象设置新的访问控制列表的拥有权,使得该特定对象成为访问控制列表根对象。对于未被确定为访问控制列表根对象的特定对象的每个更新,层次结构包括生成标识新的访问控制列表的新的访问控制列表标识符,并将新的访问控制列表标识符存储在用于从特定对象下生(descend)并从特定对象继承访问控制列表的元数据中。该方面的其他实施例可以包括提供用于当子对象访问控制列表偏离其父对象访问控制列表时,或者当子对象具有两个以上父对象时修改访问控制列表的方法。该方面的其他实施例包括相应的系统、装置和计算机程序,被配置为执行在计算机存储设备上编码的方法的动作。

在为每个对象维护单独的访问控制列表的系统中,由于修改的访问控制列表的数量和由于层次结构中的改变传播而导致的延迟,改变大量访问控制列表可能需要长的完成时间。这可能导致临时访问控制列表错误,其中特定人员可能在访问被撤销之后访问特定对象,或者其中特定人员可能在访问被授权之后无法访问特定对象。另外,与实现如下面所描述的特征的系统所需的资源量相比,为每个文档、文件夹等存储访问控制列表可能使用相对大量的资源(例如,存储位置、存储器等)。

可以实现本说明书中描述的主题的特定实施例,以便实现以下优点中的一个或多个。与对象元数据一起存储访问控制列表标识符(id)减少了管理根据层次结构排列的大数据集的访问控制列表所需的存储量和存储器量。另外,相对于用于为每个对象修改单独访问控制列表所需的完成时间,与每个对象一起存储访问控制列表id减少了修改访问控制列表时的完成时间。这是因为,在某些情况下,可以修改一个访问控制列表,并且反映对于对象层次结构中受访问控制列表影响的许多对象的改变。此外,对于许多对象仅修改一个访问控制列表减少了修改生效的时间量,因为减少或甚至消除了传播延迟。由于访问控制列表修改比在具有针对每个对象的单独访问控制列表的系统中更快地实现,因此对实体的访问检查更快地发生,因为访问控制列表修改不必传播到层次结构中的每个对象访问控制列表。这可以通过防止临时访问控制列表错误(其中特定人员可能在撤销访问之后访问特定对象)来提高安全性。此外,与标准对象层次结构的大小相比,对象层次结构的大小可以显着增加。这是因为对访问控制列表的修改通过对象层次结构更快地传播,从而减少了由于大对象层次结构的大小而导致的潜在大传播延迟。这些导致存储系统技术领域的技术改进。

在附图和以下描述中阐述了本说明书中描述的主题的一个或多个实施例的细节。根据说明书、附图和权利要求,本主题的其他特征、方面和优点将变得显而易见。

附图说明

图1是其中访问列表层次结构被集成到存储管理系统中的示例环境的框图。

图2a-d是示出示例访问控制列表权限修改的框图。

图3是用于管理访问控制列表的示例过程的流程图。

图4a是示出示例对象层次结构的框图。

图4b是提供给图4a的对象层次结构的访问控制列表指令的时序图。

图5是用于管理冲突对象访问控制列表更新的示例过程的流程图。

各附图中相同的附图标记和名称表示相同的元件。

具体实施方式

概述

本文描述的系统和方法涉及管理对象层次结构的访问控制列表。访问控制列表可以确定哪个用户具有对各种对象的读取、写入和/或创建访问。对象(例如,文件夹、文件等)可以与父对象和子对象一起存储在层次结构配置中。子对象从各自的父对象下生并链接到各自的父对象。用于父对象的访问控制列表可以定义父对象以及从父对象下生的子对象的访问权限(“子”对象可以直接地或通过一个或多个中间子对象间接地从父对象下生)。在这种情况下,为父对象存储访问控制列表,并且为子对象存储引用为父对象存储的访问控制列表的访问控制列表标识符。

对父对象的访问权限的改变请求使得更新父访问控制列表以反映该改变。在子对象具有与父对象相同的访问权限的情况下,改变也反映在子对象的访问权限中。发生这种情况是因为为子对象存储的访问控制列表标识符引用了父对象的访问控制列表。然而,只会发生对一个访问控制列表的改变-对父对象访问控制列表的改变。改变父对象访问控制列表之后,将改变反映到链接到父对象的子对象,而不必对每个单独的子对象改变访问控制列表。

存在这样的情况:子对象还可以具有与其父对象不同的访问权限。在这些情况下,子对象具有与父对象不同的访问控制列表,并且不同的访问控制列表与子对象一起存储。如果特定子对象本身是从其下生于的子对象的父对象,则这些子对象具有它们从其下生于的特定子对象的访问控制列表的访问控制列表标识符。

当子对象访问控制列表偏离其父对象访问控制列表时,或者当子对象具有两个以上父对象时,更新和修改访问控制列表可能经历异步任务处理。在异步任务处理中,以确保受影响的子节点的访问控制列表的正确冲突解决方式的方式管理更新。

以下更详细地描述这些特征和附加特征。下面描述的系统和方法在基于云的服务系统的背景下示出。然而,该系统和方法适用于管理受访问控制列表约束的层次结构存储系统并且对多个用户提供同时访问的任何计算机系统。因此,虽然在基于云的系统的情况下示出,但是系统和方法也可以在单个计算设备上实现,诸如单个服务器计算机。

示例访问控制列表层次结构

图1是示例环境100的框图,其中访问列表层次结构被集成到存储管理系统中。诸如局域网(lan)、因特网或其组合的计算机网络102连接数据存储104、云服务系统105和用户设备106。用户设备106可以访问存储在数据存储104内的多个对象。例如,如果云服务系统105是文档创建、编辑和存储系统,则数据存储中的对象可以包括文档和层次结构存储位置,诸如其中存储文件的嵌套文件夹的集合。

用户设备106是能够通过网络102请求和接收资源的电子设备。示例用户设备106包括个人计算机、移动通信设备和可以通过网络102发送和接收数据的其他设备。用户设备106通常包括用户应用,诸如网络浏览器,以便于通过网络102发送和接收数据。网络浏览器可以使用户能够显示通常位于位于万维网或局域网上的网站的网页上的文本、图像、视频、音乐和其他信息并与之交互。

数据存储104可以是任何类型的数据存储,包括服务器和大规模数据磁盘存储,或者类似的任何其他存储机制。数据存储104包括多个对象110。“对象”是用户可以访问的任何可标识的存储数据实体,并且可以由图形层次结构中的节点表示。对象包括文件夹、文件、馈送、流数据等。根据层次结构存储对象110。例如,多个对象110包括文件夹106a-106c。对象106a-106c以层次结构排列,其中对象106a是具有五个直接子对象(两个目录子对象106b和106c以及三个文件对象108a-108c)的父对象。每个对象106a-106c包含存储在每个相应的对象中的一组文件108。例如,目录对象106a具有存储在其中的文件对象108a-108c;目录对象106b具有存储在其中的文件对象108e-108f,并且文件夹对象106c具有存储在其中的文件对象108g-108n。

目录对象106a具有访问控制列表112,其与用于目录对象106a的对象元数据一起存储。访问控制列表112指定访问权限,该访问权限定义特定用户组(例如,人、按标题的一组人、按位置的一组人等)的每个用户可以对对象106a执行的动作(读取、写入、存储、创建等)。如图1所示,层次结构中的对象110的状态使得对象106b-106c和108a-108n继承目录对象106a的访问控制列表。因此,标识访问控制列表112的标识符(aclid)114与每个子对象的元数据一起存储。因此,在图1的初始状态中,已经为目录对象106a指定了访问权限的用户具有应用于对象106b-106c和108a-108c的相同访问权限。

可以修改访问控制列表112以改变当前具有对对象106a的访问权限的一个或多个用户的访问权限(修改现有用户的权限或从访问控制列表中删除现有用户)或向不具有对对象106a的访问权限的用户提供访问权限(将用户添加到acl)。因此,如果针对对象106a修改了访问控制列表112,则修改传播到父对象106a的所有其他后代对象。

将结合图2a-图2d讨论关于访问控制列表的修改和修改传播的附加细节。

可以在对象层次结构中创建新对象。对于只有一个父对象的每个新对象,将为新对象分配父对象的访问控制列表标识符。然而,对于具有两个或多个父对象的每个新对象,将为新对象创建新的访问控制列表。新的访问控制列表聚合管理相应的父对象的访问控制列表的访问控制,受制于冲突解决。此外,创建特定于新对象的访问控制列表标识符,并且新对象的新子对象具有存储在其各自元数据中的访问控制列表标识符。

图2a-图2d是示出示例访问控制列表权限修改的框图。对象层次结构200包括层次结构相关对象(即,文件夹和文件)202a-202d和204a-204d。图3是用于管理访问控制列表的示例处理300的流程图,并且结合图2a-图2d的描述来描述处理300。

处理300访问用于多个对象的对象层次结构200(302)。每个文件夹对象202a-202d和文件对象204a-204d代表存储位置或文件之一。文件夹对象202a-202d每个都定义数据库104内的特定存储位置。此外,每个文件对象202可以存储一个或多个从属文件夹对象或文件对象。例如,文件对象204a-204b存储在文件夹对象202b中,而文件对象204c-204d存储在文件夹对象202d中。

对于每个对象,对象层次结构200包括相应的节点。节点可以是对象的物理和/或符号表示。对于作为具有子对象的父对象的每个对象,有向边206将表示父对象的节点连接到表示子对象的节点。有向边206定义了从父对象节点指向子对象节点的节点之间的关系。

父节点是在相对于从父节点下生的节点的、按对象层次结构的顺序的、更高的节点。因此,子节点按层次结构的顺序低于父节点。例如,文件夹对象202a由表示对象202b-202d和204a-204d的节点的父节点表示,因为后面的每个对象直接或间接地从对象202a下生。然而,文件夹对象202c是仅表示对象202d、204c和204d的节点的父节点。子节点从其父节点继承访问控制列表权限。关于子节点如何从父节点继承访问控制列表权限的细节将在后面结合访问控制列表标识符来描述。

在对象层次结构中,至少一个对象是由根节点表示的根对象,并且至少一个对象是由叶节点表示的叶对象。根节点是父节点,它不是任何其他父节点的子节点。例如,文件夹对象202a是根节点,因为它没有父节点。叶对象是作为子节点并且没有后代的对象,例如文件对象204a-204d。叶对象由叶节点表示。

关于访问控制列表,对象可以是访问控制列表根对象。然而,访问控制列表根对象不必是对象层次结构200中的根对象。具体地,访问控制列表根对象是对象拥有访问控制列表的对象。当访问控制列表根对象不再引用父对象的访问控制列表、而是引用其自己的访问控制列表时,它“拥有”访问控制列表。例如,假设在初始状态期间文件夹对象202a具有为其设置的访问控制列表-访问控制列表208,其将用户a定义为具有写入访问,并且用户b具有读取访问。在该初始状态期间,访问控制列表208的“分叉”字段是空白的。下面更详细地描述分叉字段的使用。

所有其他对象202b-202d和204a-204d受制于文件夹对象202a的访问控制列表。在这种情况下,文件夹对象202a是层次结构中唯一的访问控制列表根对象。然而,假设稍后删除对于文件夹对象202a的访问控制列表中指定的特定用户的、对文件夹对象202d的访问。如下所述,这将导致创建由文件夹202d拥有的新的访问控制列表。因此,文件夹对象202d变为访问控制列表根对象,并且文件对象204c和204d使它们各自的访问控制列表标识符更新以引用文件夹对象202d的访问控制列表。这将导致层次结构中的两个访问控制列表根对象-文件夹对象202a和文件夹对象202d。

因此,不是访问控制列表根对象的每个对象是引用上代对象的访问控制列表的对象。这种引用可以通过具有访问控制列表标识符的元数据来完成,该访问控制列表标识符标识由访问控制列表根对象拥有的访问控制列表。如前所述,例如,在层次结构200的初始状态期间,文件夹对象202b-202d和文件对象204a-202d凭借其各自的引用文件夹对象202a的访问控制列表的访问控制列表标识符来继承文件夹对象202a的访问控制列表。因此,文件夹对象202b-202d和文件对象204a-204d不是访问控制列表根对象。

处理300接收对用于特定对象的访问控制列表的更新(304)。访问控制列表的更新修改对特定对象的访问控制权限。例如,对特定对象访问控制列表的更新可以包括为用户指定对于存储位置或文件中的任何一个的读取和写入访问,或者为用户移除读取和写入访问。

处理300确定特定根对象是否是访问控制列表根对象(306)。例如,可以通过确定对象是否是访问控制列表的拥有者来进行确定,诸如通过访问指示对象是否是访问控制列表的拥有者的数据字段。如果特定对象是拥有者,则它是访问控制列表根对象;否则,它不是。

对于被确定为访问控制列表根对象的特定对象的每个更新,更新由访问控制列表根对象所拥有的访问控制列表(308)。然而,继承访问控制列表根对象的访问控制列表的子节点不需要更新,因为它们各自的访问控制列表标识符引用访问控制列表根对象的访问控制列表。因此,更新的访问控制列表根对象的访问控制列表立即更新对象层次结构中的子对象的访问权限,该子对象具有存储在其对象元数据中的被更新的根访问控制列表的访问控制列表标识符。因此,一个更新操作为多个对象修改访问权限,而不必为每个受影响对象更新访问控制列表。

对于被确定为访问控制列表根对象的特定对象的每个更新,处理300基于更新和由用于节点的访问控制列表标识符引用的访问控制列表来生成新的访问控制列表(310)。然后,处理300为特定对象设置新的访问控制列表的所有权,以使得特定对象成为访问控制列表根对象(312)。

返回参考图2a,假设发送指令以修改文件夹对象202d的访问控制列表以添加新用户,用户c,作为文件夹对象202d内的内容的读取者。文件夹对象202d最初是非根对象,因为它通过访问控制列表标识符引用文件夹对象202a的访问控制列表。因此,由处理动作310生成新的访问控制列表210。用于文件夹对象202d的新的访问控制列表210从其先前继承的访问控制列表(即,访问控制列表208)继承访问权限,并且处理300施加对被继承的访问控制列表参数的改变以执行修改与生成新的访问控制列表210。结果,在访问控制列表210中,用户a仍然被标识为写入者并且用户b仍然被标识为读取者,并且将用户c作为读取者添加到新的访问控制列表210。

处理300生成标识新的访问控制列表210的新的访问控制列表标识符(314)。新的访问控制列表210被赋予标识符“acl2”,如图2a所示。此外,处理300将新的访问控制列表标识符存储在用于从特定对象下生并且从特定对象继承访问控制列表的每个对象的元数据中(316)。例如,对于从文件夹对象202d继承访问控制列表210的每个对象,即对象204c和204d,存储新的访问控制列表210的访问控制列表标识符的元数据被存储(314)。因此,文件对象204c和204d通过将先前存储的访问控制列表标识符“acl1”替换为“acl2”来存储访问控制列表标识符“acl2”。

分叉字段和分叉对象

随着时间的推移,访问控制列表层次结构将具有带有直接子节点的叶子,其是具有不同的访问控制列表的其他层次结构的根,诸如图2a的最终结果。系统在具有分叉子节点的每个访问控制列表根节点的列表中存储分叉子节点访问控制列表标识符的列表。例如,在图2a中,访问控制列表208将访问控制列表210的标识符存储在分叉字段中,例如,divergents:{acl2}。当在访问控制列表根节点处更新访问控制列表时,系统创建异步任务以将访问控制列表更新传播到由访问控制列表根节点的访问控制列表的分叉字段标识的所有分叉访问控制列表。换句话说,在图2a的示例中,对于未确定特定对象是访问控制列表根对象的每个更新(例如,如上所述的对文件夹对象202d的访问控制列表的第一更新),新的访问控制列表标识符(例如,图2a的acl2)被存储为特定对象下生于的访问控制列表根对象(例如,文件夹对象202a)的访问控制列表(例如,图2a的acl1)中的分叉对象。

图2b示出了进一步的示例访问控制列表权限修改。由根对象拥有的访问控制列表独立于作为根对象的子的任何对象的任何其他访问控制列表。例如,可以更新文件夹对象202d的访问控制列表,而不必更新文件夹对象202a的访问控制列表。假设发送指令以修改文件对象204d的访问控制列表以将用户d添加为写入者(3)。因此,为文件对象204d创建新的访问控制列表212。新的访问控制列表212继承其拥有者的节点的旧的访问控制列表(例如,访问控制列表210)的访问控制权限。此外,新的访问控制列表212具有作为写入者被添加的用户d并且创建用于访问控制列表的新的唯一访问控制列表标识符“acl3”。文件夹对象204d的访问控制列表210还包括访问控制列表标识符“acl3”作为分叉对象。

图2c和图2d示出了访问控制列表权限修改的进一步实例。虽然由根对象拥有的访问控制列表独立于作为根对象的子对象的任何对象的任何其他访问控制列表,但由根对象拥有的访问控制列表依赖于从其下生于的对象的访问控制列表。例如,在图2c中,对象层次结构200接收修改文件夹对象202a的访问控制列表以将用户c添加为写入者、移除用户b以及将用户d添加为读取者的指令。图2d示出了图2c中描述的指令的实现以及更新到分叉访问控制列表的传播。响应于对访问控制列表208的改变,修改访问控制列表210和212中的每一个。

由系统105更新文件夹对象202a的访问控制列表208以将用户c添加为写入者、移除用户b以及将用户d添加为读取者。在将更新应用于访问控制列表208之后,选择由访问控制列表208中的分叉对象标识的访问控制列表210。然后,访问控制列表208中的分叉条件被传播到访问控制列表210。换句话说,在访问控制列表210中,将移除用户b、将用户c改变为读取者并且将用户d添加为读取者。

同样,一旦更新了访问控制列表210,就选择由访问控制列表210中的分叉对象标识的访问控制列表212。然后,访问控制列表210中的分叉条件被传播到访问控制列表212。换句话说,在访问控制列表212中,将移除用户b、将用户c改变为写入者并且将用户d改变为读取者。

冲突的更新

可能存在由于访问控制列表更新传播延迟而导致更新可能冲突的情况。图4a是示出示例对象层次结构400和冲突的访问控制列表更新的框图,而图4b是提供给图4a的对象层次结构的访问控制列表指令的时序图。图5是用于管理冲突对象访问控制列表更新的示例处理500的流程图。将结合图4a和4b描述图5的方面。

文件夹对象202a是拥有访问控制列表402的访问控制列表根对象。访问控制列表402指定用户a、b和c具有管理员权限。管理员权限使用户能够读取、写入和指示其他用户权限。文件夹对象202b-202d和文件对象204a-204d每个均具有与每个单独的文件夹对象和文件对象的元数据一起存储的访问控制列表402的标识符“acl1”。因此,在图4b的时序图的开始,对象层次结构400中的所有文件夹和文件正在使用用于用户访问权限的文件夹对象202a的访问控制列表402。

参考图4a和4b,在时间t1处,用户a发送指令以更新文件夹对象202b以移除用户b对文件夹对象202b的访问。在时间t1之后发生的时间t2处,用户b发送指令以将用户d作为管理员添加到文件对象204a。在此特定实例中,在由用户a的指令指定的更新完成执行之前发送用户b的指令。然而,在时间t1处,用户a发送指令以从文件夹对象202b的访问控制列表中移除用户b。因此,因为用户b在时间t1之后的时间t2处发送了指令,所以用户d不应该访问文件夹对象202b或其子树。然而,由于在时间t1处发送的异步任务事件还没有在时间t2处结束,文件夹对象202b的访问控制列表标识符仍然指向文件夹对象202a,因此临时给予用户d访问文件夹对象202b和文件夹对象202b的后代的权限。

为了避免这种其中用户d被授予对文件夹对象202b及其后代的访问权的冲突条件,在时间t1处,文件夹对象202a访问控制列表包括冲突的访问控制列表更新列表412以指示文件夹对象202b已经开始在访问控制列表中分叉并且传播尚未完成。仅在更新以移除用户b对文件夹对象202b的访问完成之后,才将文件夹对象202b从访问控制列表402的冲突访问控制列表更新列表412中移除。直到更新完成,层次结构中的任何访问控制列表查找操作将涉及遍历所有祖先对象的访问控制列表,直到到达根对象202a或者到达作为访问控制列表根对象的对象。这确保了更新文件夹202b的第二请求将受制于访问控制列表402的冲突访问控制列表更新。

现在转到图5的处理,处理500为用于对子对象的访问控制列表的更新的第一更新请求生成异步任务事件(502),该子对象通过使用访问控制列表标识符来引用访问控制列表根对象的访问控制列表。例如,在时间t1处,如上所述,用户a发送指令以从文件夹对象202b的访问控制列表中移除用户b。

处理500为访问控制列表根对象的访问控制列表生成冲突的访问控制列表更新,其指定子对象的访问控制列表已经开始分叉(504)。例如,如上所述,文件夹对象202a访问控制列表被修改为包括冲突访问控制列表更新列表412,以指示文件夹对象202b已经开始在访问控制列表中分叉并且传播尚未完成。

处理500接收对子对象的访问控制列表的更新的第二更新请求,其中在第一更新请求之后并且在由第一更新请求指定的更新完成之前接收第二更新请求(506)。例如,如上所述,在时间t1之后发生的时间t2处,用户b发送指令以将用户d作为管理员添加到文件对象204a。

处理500阻止执行由第二更新请求指定的更新,直到完成由第一更新请求指定的更新(508)。返回参考上面的示例,因为第二请求被列在冲突的访问控制列表更新列表中,所以排除了由第二请求指定的更新的执行,直到由第一请求指定的更新完成为止。

在完成由第一更新请求指定的更新之后,处理500从冲突的访问控制列表中移除第二更新请求(510)。例如,在完成第一请求指定的更新之后,从冲突的访问控制列表中移除第二更新请求。该移除允许第二请求的评估以确定是否可以执行第二请求。

仅当第二更新请求是可允许的时,处理500才执行由第二更新请求指定的更新(512)。例如,如果在给定子节点的新的访问控制列表的情况下允许该请求,则可以执行更新。否则,更新被拒绝。再次参考上面的示例,将不执行第二请求的更新,因为在完成第一请求的更新之后,用户b不再能够访问文件夹对象202,如现在由文件夹对象202b拥有的访问控制列表414所示。

在这里讨论的系统收集关于用户的个人信息或者可以利用个人信息的情况下,可以向用户提供机会以控制应用或特征是否收集用户信息(例如,关于用户的社交网络、社交动作或活动、专业、用户的偏好或用户的当前位置的信息),或控制是否和/或如何接收可能与用户更相关的内容。另外,某些数据可以在存储或使用之前以一种或多种方式处理,从而移除个人可标识信息。例如,可以处理用户的身份,使得不能为用户确定个人身份信息,或者可以在获得位置信息的地方概括用户的地理位置(例如城市、邮政编码或州级),使得无法确定用户的特定位置。因此,用户可以控制如何收集关于用户的信息以及该信息如何由内容服务器使用。

本说明书中描述的主题和操作的实施例可以在包括本说明书中公开的结构及其结构等同物,或者一个或多个的组合地数字电子电路中实现,或者在计算机软件、固件或硬件中实现。本说明书中描述的主题的实施例可以实现为一个或多个计算机程序,即计算机程序指令的一个或多个模块,编码在计算机存储介质上,用于由数据处理装置执行或控制数据处理装置的操作。

计算机存储介质可以是或包括在计算机可读存储设备、计算机可读存储基板、随机或串行存取存储器阵列或设备、或它们中的一个或多个的组合中。此外,虽然计算机存储介质不是传播信号,但是计算机存储介质可以是以人工生成的传播信号编码的计算机程序指令的源或目的地。计算机存储介质也可以是或包括在一个或多个单独的物理组件或介质(例如,多个cd、磁盘或其他存储设备)中。

本说明书中描述的操作可以实现为由数据处理装置对存储在一个或多个计算机可读存储设备上或从其他源接收的数据执行的操作。

术语“数据处理装置”包括用于处理数据的所有类型的装置、设备和机器,包括例如可编程处理器、计算机、片上系统、或以上多个或组合。装置可以包括专用逻辑电路,例如fpga(现场可编程门阵列)或asic(专用集成电路)。除了硬件之外,装置还可以包括为所讨论的计算机程序创建执行环境的代码,例如,构成处理器固件的代码、协议栈、数据库管理系统、操作系统、跨平台运行时环境、虚拟机或其中一个或多个的组合。装置和执行环境可以实现各种不同的计算模型基础结构,诸如web服务、分布式计算和网格计算基础结构。

计算机程序(也称为程序、软件、软件应用程序、脚本或代码)可以用任何形式的编程语言编写,包括编译或解释语言、声明或过程语言,并且它可以以任何形式部署,包括作为独立程序或作为模块、组件、子程序、对象或适用于计算环境的其他单元。计算机程序可以但不必对应于文件系统中的文件。程序可以存储在文件的一部分中,该文件保存其他程序或数据(例如,存储在标记语言文档中的一个或多个脚本),可以存储在专用于所讨论的程序的单个文件中,或存储在多个协调文件(例如,存储一个或多个模块、子程序或代码部分的文件)中。可以部署计算机程序以在一个计算机上或在位于一个站点上或分布在多个站点上并通过通信网络互连的多个计算机上运行。

本说明书中描述的处理和逻辑流程可以由运行一个或多个计算机程序的一个或多个可编程处理器执行,以通过对输入数据进行操作并生成输出来执行动作。处理和逻辑流程也可以由专用逻辑电路执行,并且装置也可以实现为专用逻辑电路,例如fpga(现场可编程门阵列)或asic(专用集成电路)。

举例来说,适合于运行计算机程序的处理器包括通用和专用微处理器两者,以及任何类型的数字计算机的任何一个或多个处理器。通常,处理器将从只读存储器或随机存取存储器或两者接收指令和数据。计算机的基本元件是用于根据指令执行动作的处理器和用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括或可操作地耦合以从一个或多个用于存储数据的大容量存储设备接收数据或将数据传送到一个或多个用于存储数据的大容量存储设备,例如磁盘、磁光盘或光盘。然而,计算机不需要这样的设备。此外,计算机可以嵌入在另一个设备中,例如移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏控制台、全球定位系统(gps)接收器或便携式存储设备(例如,通用串行总线(usb)闪存驱动器),仅举几例。适用于存储计算机程序指令和数据的设备包括所有形式的非易失性存储器、介质和存储器设备,包括例如:半导体存储器设备,例如eprom、eeprom和闪存设备;磁盘,例如内部硬盘或可移动磁盘;磁光盘;以及cdrom和dvd-rom磁盘。处理器和存储器可以由专用逻辑电路补充或并入专用逻辑电路中。

为了提供与用户的交互,本说明书中描述的主题的实施例可以在具有用于向用户和键盘以及指示设备(例如,鼠标或轨迹球,用户可通过该设备向计算机提供输入)显示信息的显示设备(例如crt(阴极射线管)或lcd(液晶显示器)监视器)的计算机上实现。其他类型的设备也可用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感觉反馈,例如视觉反馈、听觉反馈或触觉反馈;并且可以以任何形式接收来自用户的输入,包括声学、语音或触觉输入。另外,计算机可以通过向用户使用的设备发送文档和从用户使用的设备接收文档来与用户交互;例如,通过响应于从web浏览器接收的请求将网页发送到用户的用户设备上的web浏览器。

本说明书中描述的主题的实施例可以在包括后端组件,例如作为数据服务器,或者包括中间件组件,例如应用服务器,或者包括前端组件,例如具有图形用户界面或web浏览器(用户可通过该浏览器与本说明书中描述的主题的实现进行交互)的用户计算机,或者一个或多个这样的后端、中间件或前端组件的任何组合的计算系统中实现。系统的组件可以通过任何形式或介质的数字数据通信(例如通信网络)互连。通信网络的示例包括局域网(“lan”)和广域网(“wan”)、网络间(例如,因特网)和对等网络(例如,adhoc对等网络)。

计算系统可包括用户和服务器。用户和服务器通常彼此远离,并且通常通过通信网络进行交互。用户和服务器的关系借助于在各个计算机上运行并且彼此具有用户-服务器关系的计算机程序而产生。在一些实施例中,服务器将数据(例如,html页面)发送到用户设备(例如,用于向与用户设备交互的用户显示数据和接收用户输入的目的)。可以从服务器处的用户设备接收在用户设备处生成的数据(例如,用户交互的结果)。

虽然本说明书包含许多具体实现细节,但这些不应被解释为对任何特征或可要求保护的范围的限制,而是作为特定实施例特有的特征的描述。在单独实施例的上下文中在本说明书中描述的某些特征也可以在单个实施例中组合实现。相反,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合在多个实施例中实现。此外,尽管上面的特征可以描述为以某些组合起作用并且甚至最初如此声明,但是在某些情况下可以从组合中切除来自所要求保护的组合的一个或多个特征,并且所要求保护的组合可以针对子组合或子组合的变化。

类似地,虽然在附图中以特定顺序描绘了操作,但是这不应该被理解为要求以所示的特定顺序或按顺序执行这样的操作,或者执行所有示出的操作,以实现期望的结果。在某些情况下,多任务处理和并行处理可能是有利的。此外,上述实施例中的各种系统组件的分离不应被理解为在所有实施例中都需要这种分离,并且应该理解,所描述的程序组件和系统通常可以集成在单个软件产品中或打包成多种软件产品。

因此,已经描述了主题的特定实施例。其他实施例在以下权利要求的范围内。在一些情况下,权利要求中记载的动作可以以不同的顺序执行并且仍然实现期望的结果。另外,附图中描绘的过程不一定需要所示的特定顺序或顺序次序来实现期望的结果。在某些实现中,多任务和并行处理可能是有利的。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1