llevar registro de cuales usuaries modificaron un articulo
para poder dar los permisos correspondientes
This commit is contained in:
parent
e6b2793953
commit
5c3bdbe4ee
4 changed files with 16 additions and 2 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue