如要瞭解每個元件隔離的資料夾,請參閱「儲存空間功能」。
提供目錄功能
如要提供目錄能力,元件必須宣告該功能,並從 self 路由該功能。元件會在其 
  
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
如要定義能力,請為其新增 capabilities 宣告:
{
    capabilities: [
        {
            directory: "data",
            rights: ["r*"],
            path: "/published-data",
        },
    ],
}
這項屬性定義了此元件所代管的能力,其傳出目錄路徑為 /published-data,且可用的最大權限為「唯讀」。
轉送目錄功能
如要進一步瞭解架構如何轉送元件功能,請參閱「功能轉送」。
公開
公開目錄能力可讓元件的父項存取該能力:
{
    expose: [
        {
            directory: "data",
            from: "self",
        },
    ],
}
您可以選擇指定下列項目:
提供
提供儲存空間能力可讓子元件存取該能力:
{
    offer: [
        {
            directory: "data",
            from: "parent",
            to: [ "#child-a", "#child-b" ],
        },
    ],
}
您可以選擇指定下列項目:
使用目錄功能
如要要求這項能力,請為其新增 use 宣告:
{
    use: [
        {
            directory: "data",
            rights: ["r*"],
            path: "/data",
        },
    ],
}
這會在提供的 path 中填入元件的命名空間,其中包含共用目錄內容的目錄。
使用選用目錄功能
請參閱「Connect 元件:使用選用功能」。
目錄能力權利
目錄權限可讓元件在整個系統中傳送目錄時,控管目錄的存取權。目錄權利的適用方式如下:
- capabilities:必要。提供目錄可用的權利基本組合。在- use、- offer或- expose中指定的任何權利,必須是此處宣告的子集。
- use:必要。說明使用元件要求的存取權。
- offer:選用。目標元件可用的修訂版權利。如果沒有- offer來源,權利會從- offer來源繼承。
- expose:選用。目標元件可用的修訂版權利。如果沒有- 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" ],
        },
    ],
}
子目錄
您可以 expose、offer 或 use 目錄能力的子目錄:
{
    offer: [
        {
            directory: "data",
            from: "parent",
            to: [ "#child-a", "#child-b" ],
            subdir: "children",
        },
    ],
}
重新命名目錄
您可以使用其他名稱expose或offer目錄能力:
{
    offer: [
        {
            directory: "data",
            from: "#child-a",
            to: [ "#child-b" ],
            as: "a-data",
        },
    ],
}