Sha256: 077094e0fe9f79cab7dd02fe4be5265f81e9e2771da7c9dca12056280e34f28b

Contents?: true

Size: 1.99 KB

Versions: 6

Compression:

Stored size: 1.99 KB

Contents

module Sufia
  module GenericFile
    module Permissions
      extend ActiveSupport::Concern
      #we're overriding the permissions= method which is in Hydra::AccessControls::Permissions
      include Hydra::AccessControls::Permissions
      include Hydra::AccessControls::Visibility

      included do
        has_metadata "rightsMetadata", type: ParanoidRightsDatastream
        validate :paranoid_permissions
      end

      def paranoid_permissions
        # let the rightsMetadata ds make this determination
        # - the object instance is passed in for easier access to the props ds
        rightsMetadata.validate(self)
      end

      ## Updates those permissions that are provided to it. Does not replace any permissions unless they are provided
      def permissions=(params)
        perm_hash = permission_hash
        params[:new_user_name].each { |name, access| perm_hash['person'][name] = access } if params[:new_user_name].present?
        params[:new_group_name].each { |name, access| perm_hash['group'][name] = access } if params[:new_group_name].present?

        params[:user].each { |name, access| perm_hash['person'][name] = access} if params[:user]
        params[:group].each { |name, access| perm_hash['group'][name] = access if ['read', 'edit'].include?(access)} if params[:group]

        rightsMetadata.update_permissions(perm_hash)
      end

      def permissions
        perms = super
        perms.map {|p| { name: p.name, access: p.access, type:p.type } }
      end

      def public?
        read_groups.include?('public')
      end

      private

      def permission_hash
        old_perms = self.permissions
        user_perms =  {}
        old_perms.select{|r| r[:type] == 'user'}.each do |r|
          user_perms[r[:name]] = r[:access]
        end
        user_perms
        group_perms =  {}
        old_perms.select{|r| r[:type] == 'group'}.each do |r|
          group_perms[r[:name]] = r[:access]
        end
        {'person'=>user_perms, 'group'=>group_perms}
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
sufia-4.0.0.rc1 sufia-models/app/models/concerns/sufia/generic_file/permissions.rb
sufia-models-4.0.0.rc1 app/models/concerns/sufia/generic_file/permissions.rb
sufia-4.0.0.beta4 sufia-models/app/models/concerns/sufia/generic_file/permissions.rb
sufia-models-4.0.0.beta4 app/models/concerns/sufia/generic_file/permissions.rb
sufia-models-4.0.0.beta3 app/models/concerns/sufia/generic_file/permissions.rb
sufia-4.0.0.beta3 sufia-models/app/models/concerns/sufia/generic_file/permissions.rb