llevar registro de cuales usuaries modificaron un articulo

para poder dar los permisos correspondientes
This commit is contained in:
f 2019-09-25 19:31:33 -03:00
parent e6b2793953
commit 5c3bdbe4ee
No known key found for this signature in database
GPG key ID: 2AE5A13E321F953D
4 changed files with 16 additions and 2 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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