2019-03-26 15:32:20 +00:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2019-07-03 23:40:24 +00:00
|
|
|
# Política de acceso a artículos
|
|
|
|
#
|
|
|
|
# TODO: Implementar Invitadx
|
|
|
|
class PostPolicy
|
2019-07-04 16:23:43 +00:00
|
|
|
attr_reader :post, :usuarie
|
2018-09-28 17:15:09 +00:00
|
|
|
|
2019-07-03 23:40:24 +00:00
|
|
|
def initialize(usuarie, post)
|
|
|
|
@usuarie = usuarie
|
2018-09-28 17:15:09 +00:00
|
|
|
@post = post
|
|
|
|
end
|
|
|
|
|
|
|
|
def index?
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
2019-08-06 17:50:58 +00:00
|
|
|
# Les invitades solo pueden ver sus propios posts
|
2018-09-28 17:15:09 +00:00
|
|
|
def show?
|
2019-07-04 16:23:43 +00:00
|
|
|
post.site.usuarie?(usuarie) || post.author == usuarie.email
|
2018-09-28 17:15:09 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
def new?
|
|
|
|
create?
|
|
|
|
end
|
|
|
|
|
|
|
|
def create?
|
|
|
|
true
|
|
|
|
end
|
|
|
|
|
|
|
|
def edit?
|
|
|
|
update?
|
|
|
|
end
|
|
|
|
|
2019-08-06 17:50:58 +00:00
|
|
|
# Les invitades solo pueden modificar sus propios artículos
|
2018-09-28 17:15:09 +00:00
|
|
|
def update?
|
2019-07-04 16:23:43 +00:00
|
|
|
post.site.usuarie?(usuarie) || post.author == usuarie.email
|
2018-09-28 17:15:09 +00:00
|
|
|
end
|
|
|
|
|
2019-08-06 17:50:58 +00:00
|
|
|
# Solo las usuarias pueden eliminar artículos. Les invitades pueden
|
2019-05-30 17:33:51 +00:00
|
|
|
# borrar sus propios artículos
|
|
|
|
def destroy?
|
|
|
|
update?
|
|
|
|
end
|
|
|
|
|
2019-07-03 23:40:24 +00:00
|
|
|
# Las usuarias pueden ver todos los posts
|
|
|
|
#
|
2019-08-06 17:50:58 +00:00
|
|
|
# Les invitades solo pueden ver sus propios posts
|
2019-07-03 23:40:24 +00:00
|
|
|
class Scope
|
|
|
|
attr_reader :usuarie, :scope
|
|
|
|
|
|
|
|
def initialize(usuarie, scope)
|
|
|
|
@usuarie = usuarie
|
|
|
|
@scope = scope
|
|
|
|
end
|
|
|
|
|
2018-09-28 17:15:09 +00:00
|
|
|
# Las usuarias pueden ver todos los posts
|
|
|
|
#
|
2019-08-06 17:50:58 +00:00
|
|
|
# Les invitades solo pueden ver sus propios posts
|
2018-09-28 17:15:09 +00:00
|
|
|
def resolve
|
2019-07-04 16:23:43 +00:00
|
|
|
return scope if scope.try(:first).try(:site).try(:usuarie?, usuarie)
|
|
|
|
|
2018-09-28 17:15:09 +00:00
|
|
|
# Asegurarse que al menos devolvemos []
|
|
|
|
[scope.find do |post|
|
2019-07-03 23:40:24 +00:00
|
|
|
post.author == usuarie.email
|
2018-09-28 17:15:09 +00:00
|
|
|
end].flatten.compact
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|