# class Ability
#   include CanCan::Ability
#
#   def initialize(user)
#
#     if user.admin?
#       can :manage, [Event, Photo, Invitation, User]
#       can :download, [Event, Photo]
#       cannot :download, Event do |event|
#         event.zip.blank?
#       end
#     end
#
#     unless user.admin?
#       can :read, Event, published: true
#       can :download, Event, downloadable: true
#       can :download, Photo, event: {downloadable: true}
#       cannot :download, Event do |event|
#         event.zip.blank?
#       end
#       can :read, Photo
#       can :create, Photo, event: {contributable: true}
#       can :destroy, Photo, event: {contributable: true}, user: user
#       cannot :destroy, Photo do |photo|
#         photo.created_at < 1.days.ago # TODO add specs for this feature
#       end
#       can :uploaded, Photo, event: {contributable: true}, user: user
#     end
#
#
#     # Define abilities for the passed in user here. For example:
#     #
#     #   user ||= User.new # guest user (not logged in)
#     #   if user.admin?
#     #     can :manage, :all
#     #   else
#     #     can :read, :all
#     #   end
#     #
#     # The first argument to `can` is the action you are giving the user 
#     # permission to do.
#     # If you pass :manage it will apply to every action. Other common actions
#     # here are :read, :create, :update and :destroy.
#     #
#     # The second argument is the resource the user can perform the action on. 
#     # If you pass :all it will apply to every resource. Otherwise pass a Ruby
#     # class of the resource.
#     #
#     # The third argument is an optional hash of conditions to further filter the
#     # objects.
#     # For example, here the user can only update published articles.
#     #
#     #   can :update, Article, :published => true
#     #
#     # See the wiki for details:
#     # https://github.com/ryanb/cancan/wiki/Defining-Abilities
#   end
# end
