5
0
Fork 0
mirror of https://0xacab.org/sutty/sutty synced 2024-11-24 22:06:22 +00:00

acceder a artículos desde sitios

This commit is contained in:
f 2019-07-03 20:40:24 -03:00
parent 78820b6fac
commit 8c21e9d10b
No known key found for this signature in database
GPG key ID: 2AE5A13E321F953D
5 changed files with 34 additions and 9 deletions

View file

@ -54,3 +54,7 @@ Style/GuardClause:
Metrics/PerceivedComplexity: Metrics/PerceivedComplexity:
Exclude: Exclude:
- 'app/controllers/posts_controller.rb' - 'app/controllers/posts_controller.rb'
Lint/UnreachableCode:
Exclude:
- 'app/policies/post_policy.rb'

View file

@ -44,6 +44,7 @@ gem 'devise-i18n'
gem 'email_address' gem 'email_address'
gem 'exception_notification' gem 'exception_notification'
gem 'font-awesome-rails' gem 'font-awesome-rails'
gem 'friendly_id'
gem 'haml-rails' gem 'haml-rails'
gem 'jekyll' gem 'jekyll'
gem 'jquery-rails' gem 'jquery-rails'

View file

@ -129,6 +129,8 @@ GEM
font-awesome-rails (4.7.0.4) font-awesome-rails (4.7.0.4)
railties (>= 3.2, < 6.0) railties (>= 3.2, < 6.0)
forwardable-extended (2.6.0) forwardable-extended (2.6.0)
friendly_id (5.2.5)
activerecord (>= 4.0.0)
globalid (0.4.2) globalid (0.4.2)
activesupport (>= 4.2.0) activesupport (>= 4.2.0)
haml (5.0.4) haml (5.0.4)
@ -366,6 +368,7 @@ DEPENDENCIES
email_address email_address
exception_notification exception_notification
font-awesome-rails font-awesome-rails
friendly_id
haml-rails haml-rails
jbuilder (~> 2.5) jbuilder (~> 2.5)
jekyll jekyll

View file

@ -3,6 +3,10 @@
# Un sitio es un directorio dentro del directorio de sitios de cada # Un sitio es un directorio dentro del directorio de sitios de cada
# Usuaria # Usuaria
class Site < ApplicationRecord 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 :usuaries, class_name: 'Usuarie'
has_and_belongs_to_many :invitades, class_name: 'Usuarie', has_and_belongs_to_many :invitades, class_name: 'Usuarie',
join_table: 'invitades_sites' join_table: 'invitades_sites'

View file

@ -1,10 +1,13 @@
# frozen_string_literal: true # frozen_string_literal: true
class PostPolicy < SuttyPolicy # Política de acceso a artículos
#
# TODO: Implementar Invitadx
class PostPolicy
attr_reader :post attr_reader :post
def initialize(usuarix, post) def initialize(usuarie, post)
@usuarix = usuarix @usuarie = usuarie
@post = post @post = post
end end
@ -14,7 +17,7 @@ class PostPolicy < SuttyPolicy
# Lxs invitadxs solo pueden ver sus propios posts # Lxs invitadxs solo pueden ver sus propios posts
def show? def show?
usuaria? || post.author == usuarix.email true || post.author == usuarix.email
end end
def new? def new?
@ -31,7 +34,7 @@ class PostPolicy < SuttyPolicy
# Lxs invitadxs solo pueden modificar sus propios artículos # Lxs invitadxs solo pueden modificar sus propios artículos
def update? def update?
usuaria? || post.author == usuarix.email true || post.author == usuarix.email
end end
# Solo las usuarias pueden eliminar artículos. Lxs invitadxs pueden # Solo las usuarias pueden eliminar artículos. Lxs invitadxs pueden
@ -40,16 +43,26 @@ class PostPolicy < SuttyPolicy
update? update?
end 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 # Las usuarias pueden ver todos los posts
# #
# Lxs invitadxs solo pueden ver sus propios posts # Lxs invitadxs solo pueden ver sus propios posts
def resolve def resolve
return scope if usuaria? # TODO: filtrar por invitade
return scope
# Asegurarse que al menos devolvemos [] # Asegurarse que al menos devolvemos []
[scope.find do |post| [scope.find do |post|
post.author == usuarix.email post.author == usuarie.email
end].flatten.compact end].flatten.compact
end end
end end