module Authorizer
extend ActiveSupport::Concern
private
def authorize!(object, method=nil)
defaults = {
:index => :readable_by?,
:show => :readable_by?,
:new => :creatable_by?,
:create => :creatable_by?,
:edit => :editable_by?,
:update => :editable_by?,
:destroy => :deletable_by?
}
method ||= defaults[action_name.to_sym]
raise Member::NotAuthorized unless current_member
raise Member::NotAuthorized unless object.send(method, current_member)
end
def not_authorized
redirect_to(root_path, alert: 'Not authorized.')
end
end
module Authorized::Collection
extend ActiveSupport::Concern
module ClassMethods
def creatable_by?(member)
member && member.status == 'approved'
end
end
def editable_by?(member)
member.is_admin? or
(author == member and member.status == 'approved')
end
def deletable_by?(member)
member.is_admin? or
(author == member and member.status == 'approved')
end
end