Sha256: 992e30fa402ab92fb948f6057cb85174df9d5d0f966e4061cf385c1dfe0aa1db
Contents?: true
Size: 1.56 KB
Versions: 19
Compression:
Stored size: 1.56 KB
Contents
class ReaderPage < Page include WillPaginate::ViewHelpers attr_accessor :reader, :group description %{ Presents readers and groups with configurable access control. } def current_reader Reader.current end def readers if group group.readers.visible_to(current_reader) else Reader.visible_to(current_reader) end end def groups Group.visible_to(current_reader) end def cache? public? end def public? Radiant.config['reader.directory_visibility'] == 'public' end def visible? public? || current_reader end def url_for(thing) if thing.is_a?(Reader) File.join(self.url, thing.id) elsif thing.is_a?(Group) File.join(self.url, thing.slug) end end def find_by_url(url, live = true, clean = false) url = clean_url(url) if clean my_url = self.url return false unless url =~ /^#{Regexp.quote(my_url)}(.*)/ raise ReaderError::AccessDenied unless visible? params = $1.split('/').compact self.group = Group.find_by_slug(params.first) if params.first =~ /\w/ self.reader = Reader.find_by_id(params.last) if params.last !~ /\D/ raise ReaderError::AccessDenied, "Group visibility denied" if group && !group.visible_to?(current_reader) raise ReaderError::AccessDenied, "Reader visibility denied: #{current_reader} (#{current_reader.name}) cannot see #{reader} (#{reader.name})" if reader && !reader.visible_to?(current_reader) raise ActiveRecord::RecordNotFound if reader && group && !reader.has_group?(group) self end end
Version data entries
19 entries across 19 versions & 1 rubygems