本文介绍如何设置访问权限。

OSS允许用户对Bucket和Object分别设置访问权限,方便用户控制自己的资源可 以被如何访问。对于Bucket,有三种访问权限:

  • public-read-write 允许匿名用户向该Bucket中创建/获取/删除Object
  • public-read 允许匿名用户获取该Bucket中的Object
  • private 不允许匿名访问,所有的访问都要经过签名

创建Bucket时,默认是private权限。之后用户可以通过putBucketACL来设置 Bucket的权限,通过getBucketACL来获取Bucket的权限。

let OSS = require('ali-oss')

let client = new OSS({
  region: '<Your region>'
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>'
});

async function bucketACL () {
  try {
    let result = await client.getBucketACL('bucket-name');
    console.log(result);
	
	let result = await client.putBucketACL('bucket-name', 'acl');
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

bucketACL();

对于Object,有四种访问权限:

  • default 继承所属的Bucket的访问权限,即与所属Bucket的权限值一样
  • public-read-write 允许匿名用户读写该Object
  • public-read 允许匿名用户读该Object
  • private 不允许匿名访问,所有的访问都要经过签名

创建Object时,默认为default权限。之后用户可以通过putACL来设置Object 的权限。

let OSS = require('ali-oss')
let client = new OSS({
  region: '<Your region>'
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>'
});
async function bucketACL () {
  try {
     let result = await client.getACL('my-object');
     console.log(result.acl); // default
     await client.putACL('my-object', 'public-read');
     result = yield client.getACL('my-object');
     console.log(result.acl); // public-read
  } catch (e) {
    console.log(e);
  }
}
注意
  1. 如果设置了Object的权限(非default),则访问该Object时进行权限认证时 会优先判断Object的权限,而Bucket的权限设置会被忽略。
  2. 允许匿名访问时(设置了public-read或者public-read-write权限),用户 可以直接通过浏览器访问,例如:
     http://bucket-name.oss-cn-hangzhou.aliyuncs.com/object.jpg
    

更多关于访问权限控制的内容请参考访问控制