diff --git a/.rubocop.yml b/.rubocop.yml index 0d3d351a..fd645802 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -54,3 +54,7 @@ Style/GuardClause: Metrics/PerceivedComplexity: Exclude: - 'app/controllers/posts_controller.rb' + +Lint/UnreachableCode: + Exclude: + - 'app/policies/post_policy.rb' diff --git a/Gemfile b/Gemfile index 578a8aea..4026dcd2 100644 --- a/Gemfile +++ b/Gemfile @@ -44,6 +44,7 @@ gem 'devise-i18n' gem 'email_address' gem 'exception_notification' gem 'font-awesome-rails' +gem 'friendly_id' gem 'haml-rails' gem 'jekyll' gem 'jquery-rails' diff --git a/Gemfile.lock b/Gemfile.lock index a9572c06..dc95aedf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -129,6 +129,8 @@ GEM font-awesome-rails (4.7.0.4) railties (>= 3.2, < 6.0) forwardable-extended (2.6.0) + friendly_id (5.2.5) + activerecord (>= 4.0.0) globalid (0.4.2) activesupport (>= 4.2.0) haml (5.0.4) @@ -366,6 +368,7 @@ DEPENDENCIES email_address exception_notification font-awesome-rails + friendly_id haml-rails jbuilder (~> 2.5) jekyll diff --git a/app/models/site.rb b/app/models/site.rb index 067f22b0..c443a11f 100644 --- a/app/models/site.rb +++ b/app/models/site.rb @@ -3,6 +3,10 @@ # Un sitio es un directorio dentro del directorio de sitios de cada # Usuaria class Site < ApplicationRecord + include FriendlyId + + friendly_id :name, use: %i[finders] + has_and_belongs_to_many :usuaries, class_name: 'Usuarie' has_and_belongs_to_many :invitades, class_name: 'Usuarie', join_table: 'invitades_sites' diff --git a/app/policies/post_policy.rb b/app/policies/post_policy.rb index 579560d1..3924a019 100644 --- a/app/policies/post_policy.rb +++ b/app/policies/post_policy.rb @@ -1,10 +1,13 @@ # frozen_string_literal: true -class PostPolicy < SuttyPolicy +# Política de acceso a artículos +# +# TODO: Implementar Invitadx +class PostPolicy attr_reader :post - def initialize(usuarix, post) - @usuarix = usuarix + def initialize(usuarie, post) + @usuarie = usuarie @post = post end @@ -14,7 +17,7 @@ class PostPolicy < SuttyPolicy # Lxs invitadxs solo pueden ver sus propios posts def show? - usuaria? || post.author == usuarix.email + true || post.author == usuarix.email end def new? @@ -31,7 +34,7 @@ class PostPolicy < SuttyPolicy # Lxs invitadxs solo pueden modificar sus propios artículos def update? - usuaria? || post.author == usuarix.email + true || post.author == usuarix.email end # Solo las usuarias pueden eliminar artículos. Lxs invitadxs pueden @@ -40,16 +43,26 @@ class PostPolicy < SuttyPolicy update? end - class Scope < SuttyPolicy::Scope + # Las usuarias pueden ver todos los posts + # + # Lxs invitadxs solo pueden ver sus propios posts + class Scope + attr_reader :usuarie, :scope + + def initialize(usuarie, scope) + @usuarie = usuarie + @scope = scope + end + # Las usuarias pueden ver todos los posts # # Lxs invitadxs solo pueden ver sus propios posts def resolve - return scope if usuaria? - + # TODO: filtrar por invitade + return scope # Asegurarse que al menos devolvemos [] [scope.find do |post| - post.author == usuarix.email + post.author == usuarie.email end].flatten.compact end end