From 5c3bdbe4ee4086441210b3b64aa193da1e09a8c0 Mon Sep 17 00:00:00 2001 From: f Date: Wed, 25 Sep 2019 19:31:33 -0300 Subject: [PATCH] llevar registro de cuales usuaries modificaron un articulo para poder dar los permisos correspondientes --- app/models/post.rb | 9 +++++++++ app/policies/post_policy.rb | 4 ++-- app/services/post_service.rb | 4 ++++ app/views/posts/index.haml | 1 + 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/app/models/post.rb b/app/models/post.rb index 7aab8124..e89e7125 100644 --- a/app/models/post.rb +++ b/app/models/post.rb @@ -133,6 +133,7 @@ class Post < OpenStruct yaml['layout'] = layout.name.to_s # Y que no se procese liquid yaml['liquid'] = false + yaml['usuaries'] = usuaries.map(&:id).uniq "#{yaml.to_yaml}---\n\n#{body}" end @@ -234,8 +235,16 @@ class Post < OpenStruct end alias update update_attributes + def usuaries + @usuaries ||= Usuarie.where(id: document_usuaries).to_a + end + private + def document_usuaries + document.data.fetch('usuaries', []) + end + def new_attribute_was(method) attr_was = (attribute_name(method).to_s + '_was').to_sym return attr_was if singleton_class.method_defined? attr_was diff --git a/app/policies/post_policy.rb b/app/policies/post_policy.rb index b089aecc..5a9f29ff 100644 --- a/app/policies/post_policy.rb +++ b/app/policies/post_policy.rb @@ -17,7 +17,7 @@ class PostPolicy # Les invitades solo pueden ver sus propios posts def show? - post.site.usuarie?(usuarie) || post.author == usuarie.email + post.site.usuarie?(usuarie) || post.usuaries.include?(usuarie) end def new? @@ -34,7 +34,7 @@ class PostPolicy # Les invitades solo pueden modificar sus propios artículos def update? - post.site.usuarie?(usuarie) || post.author == usuarie.email + post.site.usuarie?(usuarie) || post.usuaries.include?(usuarie) end # Solo las usuarias pueden eliminar artículos. Les invitades pueden diff --git a/app/services/post_service.rb b/app/services/post_service.rb index 0ef151bd..a2008e95 100644 --- a/app/services/post_service.rb +++ b/app/services/post_service.rb @@ -2,6 +2,7 @@ # Este servicio se encarga de crear artículos y guardarlos en git, # asignándoselos a une usuarie +# rubocop:disable Metrics/BlockLength PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do # Crea un artículo nuevo # @@ -9,6 +10,7 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do def create # TODO: Implementar layout self.post = site.posts(lang: params[:post][:lang] || I18n.locale).build + post.usuaries << usuarie commit(action: :created) if post.update(post_params) @@ -18,6 +20,7 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do end def update + post.usuaries << usuarie commit(action: :updated) if post.update(post_params) # Devolver el post aunque no se haya salvado para poder rescatar los @@ -48,3 +51,4 @@ PostService = Struct.new(:site, :usuarie, :post, :params, keyword_init: true) do params.require(:post).permit(post.params) end end +# rubocop:enable Metrics/BlockLength diff --git a/app/views/posts/index.haml b/app/views/posts/index.haml index c1d9e4dc..83de4e61 100644 --- a/app/views/posts/index.haml +++ b/app/views/posts/index.haml @@ -28,6 +28,7 @@ %table.table.table-condensed %tbody - @posts.each do |post| + - next unless policy(post).show? -# saltearse el post a menos que esté en la categoría por la que estamos filtrando