Chris Lu
3 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
14 additions and
0 deletions
-
weed/s3api/auth_credentials.go
-
weed/s3api/auth_credentials_test.go
|
@ -320,6 +320,7 @@ func (identity *Identity) canDo(action Action, bucket string, objectKey string) |
|
|
return false |
|
|
return false |
|
|
} |
|
|
} |
|
|
target := string(action) + ":" + bucket + objectKey |
|
|
target := string(action) + ":" + bucket + objectKey |
|
|
|
|
|
adminTarget := s3_constants.ACTION_ADMIN + ":" + bucket + objectKey |
|
|
limitedByBucket := string(action) + ":" + bucket |
|
|
limitedByBucket := string(action) + ":" + bucket |
|
|
adminLimitedByBucket := s3_constants.ACTION_ADMIN + ":" + bucket |
|
|
adminLimitedByBucket := s3_constants.ACTION_ADMIN + ":" + bucket |
|
|
for _, a := range identity.Actions { |
|
|
for _, a := range identity.Actions { |
|
@ -328,6 +329,9 @@ func (identity *Identity) canDo(action Action, bucket string, objectKey string) |
|
|
if strings.HasPrefix(target, act[:len(act)-1]) { |
|
|
if strings.HasPrefix(target, act[:len(act)-1]) { |
|
|
return true |
|
|
return true |
|
|
} |
|
|
} |
|
|
|
|
|
if strings.HasPrefix(adminTarget, act[:len(act)-1]) { |
|
|
|
|
|
return true |
|
|
|
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
if act == limitedByBucket { |
|
|
if act == limitedByBucket { |
|
|
return true |
|
|
return true |
|
|
|
@ -115,4 +115,14 @@ func TestCanDo(t *testing.T) { |
|
|
assert.Equal(t, true, ident4.canDo(ACTION_READ, "special_bucket", "/a/b/c/d.txt")) |
|
|
assert.Equal(t, true, ident4.canDo(ACTION_READ, "special_bucket", "/a/b/c/d.txt")) |
|
|
assert.Equal(t, false, ident4.canDo(ACTION_READ, "bucket1", "/a/b/c/d.txt")) |
|
|
assert.Equal(t, false, ident4.canDo(ACTION_READ, "bucket1", "/a/b/c/d.txt")) |
|
|
|
|
|
|
|
|
|
|
|
// admin buckets
|
|
|
|
|
|
ident5 := &Identity{ |
|
|
|
|
|
Name: "anything", |
|
|
|
|
|
Actions: []Action{ |
|
|
|
|
|
"Admin:special_*", |
|
|
|
|
|
}, |
|
|
|
|
|
} |
|
|
|
|
|
assert.Equal(t, true, ident5.canDo(ACTION_READ, "special_bucket", "/a/b/c/d.txt")) |
|
|
|
|
|
assert.Equal(t, true, ident5.canDo(ACTION_WRITE, "special_bucket", "/a/b/c/d.txt")) |
|
|
|
|
|
|
|
|
} |
|
|
} |