如需了解按组件隔离的目录,请参阅存储功能。
提供目录功能
如需提供目录功能,组件必须声明该功能并从 self
路由该功能。该组件在其
如需定义该 capability,请为其添加 capabilities
声明:
{
capabilities: [
{
directory: "data",
rights: ["r*"],
path: "/published-data",
},
],
}
这定义了此组件托管的一项 capability,其传出目录路径为 /published-data
,且可用的最大权限为“只读”。
路由目录功能
组件通过向其父级公开目录功能并向其子级提供这些功能来路由目录功能。
如需详细了解该框架如何路由组件功能,请参阅功能路由。
公开
公开目录功能可让组件的父级访问该功能:
{
expose: [
{
directory: "data",
from: "self",
},
],
}
您可以选择性地指定:
成为协作者
提供存储功能可让子组件访问该功能:
{
offer: [
{
directory: "data",
from: "parent",
to: [ "#child-a", "#child-b" ],
},
],
}
您可以选择性地指定:
使用目录功能
如需请求该 capability,请为其添加 use
声明:
{
use: [
{
directory: "data",
rights: ["r*"],
path: "/data",
},
],
}
这会使用位于所提供 path
且包含共享目录内容的目录填充组件的命名空间。
使用可选目录功能
请参阅 Connect 组件:使用可选功能。
目录功能权限
目录权限可让组件在目录在整个系统中路由时控制对目录的访问权限。目录权限的应用方式如下:
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
,但只提供只读权限。在这种情况下,路由会失败,并且 A 的命名空间中不会出现 data
。
// 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",
},
],
}