目錄功能

目錄功能 允許元件 來連線至其他元件提供的目錄

如要進一步瞭解個別元件隔離的目錄,請參閱 儲存空間功能

提供目錄功能

如要提供目錄能力,元件必須宣告 從self。元件會代管 其 傳出目錄 ,直接在 Google Cloud 控制台實際操作。

若要定義能力,請為該功能新增 capabilities 宣告:

{
    capabilities: [
        {
            directory: "data",
            rights: ["r*"],
            path: "/published-data",
        },
    ],
}

這定義了由元件代管的能力,該元件具有傳出目錄路徑 為 /published-data,且可用性上限 rights 則為「唯讀」。

轉送目錄功能

元件路徑目錄功能,方法是將公開功能 家長為他們提供福利

如要進一步瞭解架構如何轉送元件功能, 請參閱功能轉送

公開

公開目錄能力可讓元件的父項存取該元件 功能:

{
    expose: [
        {
            directory: "data",
            from: "self",
        },
    ],
}

您可以視需要指定以下項目:

提供

提供儲存空間能力可讓子項元件存取該功能 功能:

{
    offer: [
        {
            directory: "data",
            from: "parent",
            to: [ "#child-a", "#child-b" ],
        },
    ],
}

您可以視需要指定以下項目:

使用目錄功能

如要使用儲存空間能力,元件必須要求能力並 開啟對應的路徑 命名空間 ,直接在 Google Cloud 控制台實際操作。

如要要求這項能力,請為該功能新增 use 宣告:

{
    use: [
        {
            directory: "data",
            rights: ["r*"],
            path: "/data",
        },
    ],
}

這會在元件的命名空間中,填入所提供的 path 目錄 包含共用目錄內容

您必須指定「rights。 您可以視需要指定 subdir

使用選用目錄功能

請參閱連結元件:使用選用功能

目錄能力權限

目錄權限可讓元件像原樣地控制目錄的存取權 路徑會轉送到整個系統目錄權利的套用方式如下:

  • capabilities必填。 提供目錄可用的基本權利組合。任何權利 在 useofferexpose 中指定的是這些項目的子集 宣告。
  • use必填。 說明取用元件要求的存取權限。
  • offer選填。 目的地元件可用的已修改權利。沿用權限 來自 offer 來源 (如果沒有)。
  • expose選填。 目的地元件可用的已修改權利。沿用權限 來自 expose 來源 (如果沒有)。

rights 欄位可包含下列項目的任意組合 fuchsia.io.Rights 符記:

rights: [
  "connect",
  "enumerate",
  "traverse",
  "read_bytes",
  "write_bytes",
  "execute_bytes",
  "update_attributes",
  "get_attributes",
  "modify_directory",
]

這個架構提供使用別名宣告 rights 的簡化形式。 每個別名都代表一組提供通用的 FIDL 權利權杖組合 讀取、寫入或執行存取權:

別名 FIDL 權利
r* connect, enumerate, traverse, read_bytes, get_attributes
w* connect, enumerate, traverse, write_bytes, update_attributes, modify_directory
x* connect, enumerate, traverse, execute_bytes
rw* connect, enumerate, traverse, read_bytes, write_bytes, get_attributes, update_attributes, modify_directory
rx* connect, enumerate, traverse, read_bytes, execute_bytes, get_attributes

rights 欄位只能包含一個別名。其他 FIDL 權利可能 附加。

範例

請參考以下範例,其中元件 A 要求讀取/寫入存取權 至 data 目錄:

// A.cml
{
    use: [
        {
            directory: "data",
            rights: ["rw*"],
            path: "/data",
        },
    ],
}

不過,父項元件 B 提供 data 目錄以元件 A 但只有唯讀權限。在這種情況下,轉送失敗,data 就不會 都出現在 A 的命名空間中

// B.cml
{
    capabilities: [
        {
            directory: "data",
            rights: ["r*"],
            path: "/published-data",
        },
    ],
    offer: [
        {
            directory: "data",
            from: "self",
            to: [ "#A" ],
        },
    ],
}

子目錄

您可 exposeofferuse 是目錄能力的子目錄:

{
    offer: [
        {
            directory: "data",
            from: "parent",
            to: [ "#child-a", "#child-b" ],
            subdir: "children",
        },
    ],
}

重新命名目錄

您可以使用其他名稱 exposeoffer 目錄能力:

{
    offer: [
        {
            directory: "data",
            from: "#child-a",
            to: [ "#child-b" ],
            as: "a-data",
        },
    ],
}