Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save mjgiarlo/2967671 to your computer and use it in GitHub Desktop.
Save mjgiarlo/2967671 to your computer and use it in GitHub Desktop.
permissions to prevent updates we don't want
require 'hydra/datastream/rights_metadata'
module Hydra
module Datastream
class RightsMetadata < ActiveFedora::NokogiriDatastream
class PermissionsViolation < ::RuntimeError
end
# Validates permissions changes
def validate_permissions(type, actor, access_level)
# do some validations, throw some errors, whatever
raise PermissionsViolation if [type, actor, access_level] == [:person, "person123", "edit"]
end
# Wraps permissions with validation
old_permissions = instance_method(:permissions)
define_method(:permissions) do |selector, new_access_level=nil|
type = selector.keys.first.to_sym
actor = selector.values.first
validate_permissions(type, actor, new_access_level)
old_permissions.bind(self).call(selector, new_access_level)
end
end
end
end
## to test this in rails console:
# rm = Hydra::Datastream::RightsMetadata.new(nil, 'rightsMd')
# rm.permissions({:person=>"person123"}, "edit")
Hydra::Datastream::RightsMetadata::PermissionsViolation: Hydra::Datastream::RightsMetadata::PermissionsViolation
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment