本文介绍如何获取和设置对象的访问权限。对象的访问权限优先级高于桶的访问权限,如果对象未设置访问权限,则遵循桶的访问权限。
注意
设置对象的读写权限前,您必须具有 tos:PutObjectACL
权限,或具备 WRITE_ACP 对象 ACL 权限,详细信息,请参见权限配置指南。
对象 ACL 权限包含以下类型。
访问权限 | 描述 | 访问权限值 |
---|---|---|
READ | 允许被授权者读取对象数据及其元数据。 | enum.PermissionRead |
READ_ACP | 允许被授权者读取对象 ACL 。 | enum.PermissionReadAcp |
WRITE_ACP | 允许被授权者为适用的对象编写 ACL。 | enum.PermissionWriteAcp |
FULL_CONTROL | 允许被授权者在对象上的 READ、READ_ACP 和 WRITE_ACP 权限。 | enum.PermissionFullControl |
您可以在请求体中填写详细的 ACL 权限信息,或在请求头中设置访问权限。
通过 x-tos-acl 请求头设置对象的读写权限包含以下类型。
访问权限 | 描述 | 访问权限值 |
---|---|---|
私有 | 对象的所有者拥有所有权限,其他用户没有权限操作该对象。 | private |
公共读 | 对象的所有者拥有所有权限,其他用户只有该对象的读权限。 | public-read |
公共读写 | 所有用户都有该对象的读权限。 | public-read-write |
认证用户读 | 对象的所有者拥有所有权限,认证用户拥有该对象的读权限。 | authenticated-read |
桶所有者读 | 对象所有者拥有所有权限,桶所有者拥有此对象的读权限。 | bucket-owner-read |
桶所有者具备所有权限 | 桶所有者和对象所有者都拥有对象的所有操作权限。 | bucket-owner-full-control |
以下代码通过 x-tos-acl 设置对象的读写权限。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <button id="upload">上传</button> <input id="file" type="file" /> <!-- 导入 SDK 文件 --> <script src="https://tos-public.volccdn.com/obj/volc-tos-public/@volcengine/tos-sdk@latest/browser/tos.umd.production.min.js"></script> <script type="text/javascript"> const client = new TOS({ // yourRegion 填写 Bucket 所在地域。以华北2(北京)为例,yourRegion 填写为 cn-beijing。 region: yourRegion, // 填写 endpoint 名称。 endpoint: yourEndpoint, // 从 STS 服务获取的临时访问密钥(AccessKey ID 和 AccessKey Secret)。 accessKeyId: yourAccessKey, accessKeySecret: yourSecretKey, // 从 STS 服务获取的安全令牌(SecurityToken)。 stsToken: yourSecurityToken, // 填写 Bucket 名称。 bucket: bucketName, }); const objectName = 'exampledir/putObjectobject.txt'; const main = async () => { // 设置对象的访问权限为 'public-read-write' await client.putObjectAcl({ bucket: bucketName, key: objectName, acl: 'public-read-write', }); }; main(); </script> </body> </html>
注意
获取对象的访问权限前,您必须具有 tos:GetObjectACL
权限,或具备 READ_ACP 的对象 ACL 权限,具体操作,请参见权限配置指南。
以下代码用于获取对象的访问权限。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Document</title> </head> <body> <button id="upload">上传</button> <input id="file" type="file" /> <!-- 导入 SDK 文件 --> <script src="https://tos-public.volccdn.com/obj/volc-tos-public/@volcengine/tos-sdk@latest/browser/tos.umd.production.min.js"></script> <script src="./const.js"></script> <script type="text/javascript"> const client = new TOS({ // yourRegion 填写 Bucket 所在地域。以华北2(北京)为例,yourRegion 填写为 cn-beijing。 region: yourRegion, // 填写 endpoint 名称。 endpoint: yourEndpoint, // 从 STS 服务获取的临时访问密钥(AccessKey ID 和 AccessKey Secret)。 accessKeyId: yourAccessKey, accessKeySecret: yourSecretKey, // 从 STS 服务获取的安全令牌(SecurityToken)。 stsToken: yourSecurityToken, // 填写 Bucket 名称。 bucket: bucketName, }); const objectName = 'exampledir/putObjectobject.txt'; const main = async () => { // 查询对象的权限信息 const { data: newData } = await client.getObjectAcl({ bucket: bucketName, key: objectName, }); // object info console.log('object acl info:', newData); }; main(); </script> </body> </html>