开发者社区> 问答> 正文

JavaScript-SDK之如何实现设置访问权限?

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

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

创建Bucket时,默认是private权限。之后用户可以通过putBucketACL来设置Bucket的权限,通过getBucketACL来获取Bucket的权限。 var co = require('co');
var OSS = require('ali-oss')
var client = new OSS({
  region: '<Your region>'
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>'
});
co(function* () {
  var result = yield client.getBucketACL('bucket-name');
  console.log(result);
  var result = yield client.putBucketACL('bucket-name', 'region', 'acl');
  console.log(result);
}).catch(function (err) {
  console.log(err);
});


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

创建Object时,默认为default权限。之后用户可以通过putACL来设置Object的权限。 var co = require('co');
var OSS = require('ali-oss')
var client = new OSS({
  region: '<Your region>'
  accessKeyId: '<Your AccessKeyId>',
  accessKeySecret: '<Your AccessKeySecret>',
  bucket: '<Your bucket name>'
});
co(function* () {
  var result = yield client.getACL('my-object');
  console.log(result.acl); // default
  yield client.putACL('my-object', 'public-read');
  var result = yield client.getACL('my-object');
  console.log(result.acl); // public-read
}).catch(function (err) {
  console.log(err);
});


需要注意的是:
  1. 如果设置了Object的权限(非default),则访问该Object时进行权限认证时会优先判断Object的权限,而Bucket的权限设置会被忽略。

  2. 允许匿名访问时(设置了public-read或者public-read-write权限),用户可以直接通过浏览器访问,例如:[backcolor=transparent] http[backcolor=transparent]:[backcolor=transparent]//bucket-name.oss-cn-hangzhou.aliyuncs.com/object.jpg

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

展开
收起
青衫无名 2017-10-19 09:45:33 1532 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
JavaScript函数 立即下载
一个跨平台的云服务SDK需要什么 立即下载