class AWS::S3::ACL::Grant
A Policy is made up of one or more Grant objects. A grant sets a specific permission and grants it to the associated grantee.
When creating a new grant to add to a policy, you need only set its permission and then associate with a Grantee.
grant = ACL::Grant.new => #<AWS::S3::ACL::Grant (permission) to (grantee)>
Here we see that neither the permission nor the grantee have been set. Let's make this grant provide the READ permission.
grant.permission = 'READ' grant => #<AWS::S3::ACL::Grant READ to (grantee)>
Now let's assume we have a grantee to the AllUsers group already set up. Just associate that grantee with our grant.
grant.grantee = all_users_group_grantee grant => #<AWS::S3::ACL::Grant READ to AllUsers Group>
And now are grant is complete. It provides READ permission to the AllUsers group, effectively making this object publicly readable without any authorization.
Assuming we have some object's policy available in a local variable
called policy
, we can now add this grant onto its collection
of grants.
policy.grants << grant
And then we send the updated policy to the S3 servers.
some_s3object.acl(policy)
Attributes
Public Class Methods
Returns stock grants with name type
.
public_read_grant = ACL::Grant.grant :public_read => #<AWS::S3::ACL::Grant READ to AllUsers Group>
Valid stock grant types are:
-
:authenticated_read
-
:authenticated_read_acp
-
:authenticated_write
-
:authenticated_write_acp
-
:logging_read
-
:logging_read_acp
-
:logging_write
-
:logging_write_acp
-
:public_read
-
:public_read_acp
-
:public_write
-
:public_write_acp
# File lib/aws/s3/acl.rb, line 258 def grant(type) case type when *stock_grant_map.keys build_stock_grant_for type else raise ArgumentError, "Unknown grant type `#{type}'" end end
# File lib/aws/s3/acl.rb, line 294 def initialize(attributes = {}) attributes = {'permission' => nil}.merge(attributes) @attributes = attributes extract_grantee! yield self if block_given? end
Private Class Methods
# File lib/aws/s3/acl.rb, line 282 def build_stock_grant_for(type) stock_grant = stock_grant_map[type] grant = new do |g| g.permission = stock_grant[:permission] end grant.grantee = Grantee.new do |gr| gr.group = stock_grant[:group] end grant end
# File lib/aws/s3/acl.rb, line 268 def stock_grant_map grant = lambda {|permission, group| {:permission => permission, :group => group}} groups = {:public => 'AllUsers', :authenticated => 'Authenticated', :logging => 'LogDelivery'} permissions = %w(READ WRITE READ_ACP WRITE_ACP) stock_grants = {} groups.each do |grant_group_name, group_name| permissions.each do |permission| stock_grants["#{grant_group_name}_#{permission.downcase}".to_sym] = grant[permission, group_name] end end stock_grants end
Public Instance Methods
Set the permission for this grant.
grant.permission = 'READ' grant => #<AWS::S3::ACL::Grant READ to (grantee)>
If the specified permisison level is not valid, an
InvalidAccessControlLevel
exception will be raised.
# File lib/aws/s3/acl.rb, line 308 def permission=(permission_level) unless self.class.valid_permissions.include?(permission_level) raise InvalidAccessControlLevel.new(self.class.valid_permissions, permission_level) end attributes['permission'] = permission_level end
The xml representation of this grant.
# File lib/aws/s3/acl.rb, line 316 def to_xml Builder.new(permission, grantee).to_s end
Private Instance Methods
# File lib/aws/s3/acl.rb, line 341 def extract_grantee! @grantee = Grantee.new(attributes['grantee']) if attributes['grantee'] end