Sha256: 0bf3628b89ec1b37b252ee20c0207c254b176c092e4b1f6556470ade893ff9dd
Contents?: true
Size: 1.76 KB
Versions: 1
Compression:
Stored size: 1.76 KB
Contents
module PrivatePerson module Permitted def acts_as_permitted class_eval do def is_permitted?(permissor, permissible) if permissible.nil? raise 'Called is_permitted? on nil. Does not compute. Preparing to self destruct.' end unless Permission.by_permissible(permissible).blocked.empty? return false end wildcards = permissions_by(permissor).by_wildcard(permissible.class.name).legitimate if wildcards.present? return true end permissions = permissions_by(permissor).by_permissible(permissible).legitimate if permissions.present? return true end return false end def permissions_by(permissor) Permission.by_permissor(permissor).by_relationship_type(relationship_to(permissor)) end def relationship_to(permissor) # First make sure we're not a new user if self.new_record? return 'public' end # Next check for an efficient method for relationship_method in permissor.class.of is_method = ('is_' + relationship_method.to_s.singularize + '_of?').to_sym if respond_to?(is_method) and self.send(is_method, permissor) return relationship_method.to_s end end # Then check for a slow method for relationship_method in permissor.class.of relationship_members = permissor.send(relationship_method.to_sym) if relationship_members.present? and relationship_members.find(:id => self.id).exists? return relationship_method.to_s end end return 'public' end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
private_person-0.2.9 | lib/private_person/models/permitted.rb |