diff options
Diffstat (limited to 'weed/s3api/s3api_acp.go')
| -rw-r--r-- | weed/s3api/s3api_acp.go | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/weed/s3api/s3api_acp.go b/weed/s3api/s3api_acp.go new file mode 100644 index 000000000..0a79990f5 --- /dev/null +++ b/weed/s3api/s3api_acp.go @@ -0,0 +1,28 @@ +package s3api + +import ( + "github.com/seaweedfs/seaweedfs/weed/s3api/s3_constants" + "github.com/seaweedfs/seaweedfs/weed/s3api/s3err" + "net/http" +) + +func getAccountId(r *http.Request) string { + id := r.Header.Get(s3_constants.AmzAccountId) + if len(id) == 0 { + return AccountAnonymous.Id + } else { + return id + } +} + +func (s3a *S3ApiServer) checkAccessByOwnership(r *http.Request, bucket string) s3err.ErrorCode { + metadata, errCode := s3a.bucketRegistry.GetBucketMetadata(bucket) + if errCode != s3err.ErrNone { + return errCode + } + accountId := getAccountId(r) + if accountId == AccountAdmin.Id || accountId == *metadata.Owner.ID { + return s3err.ErrNone + } + return s3err.ErrAccessDenied +} |
