mirror of
https://0xacab.org/sutty/sutty
synced 2024-11-14 07:11:41 +00:00
acceder a artículos desde sitios
This commit is contained in:
parent
78820b6fac
commit
8c21e9d10b
5 changed files with 34 additions and 9 deletions
|
@ -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'
|
||||||
|
|
1
Gemfile
1
Gemfile
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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'
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue