Object权限控制
设置Object的访问权限
目前BOS支持两种方式设置ACL。第一种是使用Canned Acl,在PutObjectAcl的时候,通过头域的"x-bce-acl"或者"x-bce-grant-permission'来设置object访问权限,当前可设置的权限包括private和public-read,两种类型的header不可以同时在一个请求中出现。第二种方式是上传一个ACL文件。 详细信息请参考设置Object权限控制。
-
通过使用头域的"x-bce-acl"来设置object访问权限
// 只能为private,public-read和public-read-write中的一个 let cannedAcl = "private"; // cannel acl try { await bosClient.putObjectAcl(bucketName, objectName, cannedAcl); logger.info("put object acl success"); } catch (bosResponse) { logger.error(`errCode: ${bosResponse.error.code}`) logger.error(`requestId: ${bosResponse.error.requestId}`) logger.error(`errMessage: ${bosResponse.error.message}`) logger.error(`statusCode: ${bosResponse.statusCode}`) }
-
设置细粒度的权限
import { ObjectAclConf } from "bos/src/main/ets/bos/api/DataType"
// 给用户e13b12d0131b4c8bae959df4969387b8授予读权限 let acl =
{ "accessControlList":[ { "grantee":[{ "id":"e13b12d0131b4c8bae959df4969387b8" }], "permission":["READ"] } ] }
let objectAclConf = JSON.parse(acl) as ObjectAclConf;try { await bosClient.putObjectAcl(bucketName, objectName, undefined, undefined, undefined, objectAclConf); logger.info("put object acl success"); } catch (bosResponse) { logger.error(
errCode: ${bosResponse.error.code}
) logger.error(requestId: ${bosResponse.error.requestId}
) logger.error(errMessage: ${bosResponse.error.message}
) logger.error(statusCode: ${bosResponse.statusCode}
) }
查看Object的权限
示例代码
let objectAclConf: ObjectAclConf;
try {
objectAclConf = await bosClient.getObjectAcl(bucketName, objectName);
logger.info(`get object acl success, info : ${JSON.stringify(objectAclConf)}`)
} catch (bosResponse) {
logger.error(`errCode: ${bosResponse.error.code}`)
logger.error(`requestId: ${bosResponse.error.requestId}`)
logger.error(`errMessage: ${bosResponse.error.message}`)
logger.error(`statusCode: ${bosResponse.statusCode}`)
}
getObjectAcl
方法返回的解析类中可供调用的参数有:
参数 | 说明 |
---|---|
accessControlList | 标识object的权限列表 |
grantee | 标识被授权人 |
id | 被授权人ID |
permission | 标识被授权人的权限 |
删除Object的权限
示例代码
try {
await bosClient.deleteObjectAcl(bucketName, objectName);
logger.info(`delete object acl success`)
} catch (bosResponse) {
logger.error(`errCode: ${bosResponse.error.code}`)
logger.error(`requestId: ${bosResponse.error.requestId}`)
logger.error(`errMessage: ${bosResponse.error.message}`)
logger.error(`statusCode: ${bosResponse.statusCode}`)
}