目录功能 允许组件 连接到由另一个组件提供的目录。
如需了解每个组件隔离的目录,请参阅 存储空间。
提供目录功能
要提供目录功能,组件必须声明该功能,
从 self
路由。该组件用于托管
其
传出目录
,了解所有最新动态。
如需定义该 capability,请为其添加 capabilities
声明:
{
capabilities: [
{
directory: "data",
rights: ["r*"],
path: "/published-data",
},
],
}
这定义了一个由此组件托管的功能,其传出目录路径
为 /published-data
,且其最大可用时长
rights 为“read-only”。
路由目录功能
组件通过向目录功能公开来路由目录功能 提供给子女。
如需详细了解该框架如何路由组件功能, 请参阅功能路由。
曝光
公开目录功能可让组件的父级访问该 capability。 功能:
{
expose: [
{
directory: "data",
from: "self",
},
],
}
您可以选择指定以下内容:
成为协作者
提供存储空间功能可让子组件访问该功能 功能:
{
offer: [
{
directory: "data",
from: "parent",
to: [ "#child-a", "#child-b" ],
},
],
}
您可以选择指定以下内容:
使用目录功能
要使用存储空间功能,组件必须请求该功能, 在其 命名空间 ,了解所有最新动态。
如需请求该功能,请为其添加 use
声明:
{
use: [
{
directory: "data",
rights: ["r*"],
path: "/data",
},
],
}
这会使用提供的 path
中的目录填充组件的命名空间
包含共享目录内容。
使用可选目录功能
请参阅连接组件:使用可选功能。
目录功能权限
通过目录权限,组件可以按原样控制对目录的访问权限 在整个系统中路由目录权限的应用方式如下:
capabilities
:必需。 提供适用于目录的基本权限集。任何权利use
、offer
或expose
中指定的对象必须是 。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
会向组件 A
提供目录 data
仅具有只读权限。在这种情况下,路由失败,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",
},
],
}