ver todos los sitios como usuarie y como invitade
This commit is contained in:
parent
15a92c1772
commit
c804d386f0
10 changed files with 74 additions and 65 deletions
|
@ -19,7 +19,10 @@ class ApplicationController < ActionController::Base
|
|||
def find_site
|
||||
id = params[:site_id] || params[:id]
|
||||
|
||||
current_usuarie.sites.find_by_name id
|
||||
# TODO: encontrar una forma mejor de buscar en todos los sitios en
|
||||
# lugar de desperdiciar una consulta
|
||||
current_usuarie.sites.find_by_name(id) ||
|
||||
current_usuarie.sites_as_invitade.find_by_name(id)
|
||||
end
|
||||
|
||||
def find_post(site)
|
||||
|
|
|
@ -8,7 +8,8 @@ class SitesController < ApplicationController
|
|||
# Ver un listado de sitios
|
||||
def index
|
||||
authorize Site
|
||||
@sites = current_usuarie.sites
|
||||
@sites = [current_usuarie.sites,
|
||||
current_usuarie.sites_as_invitade].flatten
|
||||
end
|
||||
|
||||
# No tenemos propiedades de un sitio aún, así que vamos al listado de
|
||||
|
|
|
@ -11,14 +11,17 @@ class Site < ApplicationRecord
|
|||
has_and_belongs_to_many :invitades, class_name: 'Usuarie',
|
||||
join_table: 'invitades_sites'
|
||||
|
||||
# Carga el sitio Jekyll una vez que se inicializa el modelo
|
||||
after_initialize :load_jekyll!
|
||||
|
||||
attr_accessor :jekyll, :collections
|
||||
|
||||
def load_jekyll!
|
||||
Dir.chdir(path) do
|
||||
@jekyll ||= Site.load_jekyll(Dir.pwd)
|
||||
end
|
||||
def invitade?(usuarie)
|
||||
invitades.pluck(:id).include? usuarie.id
|
||||
end
|
||||
|
||||
def usuarie?(usuarie)
|
||||
usuaries.pluck(:id).include? usuarie.id
|
||||
end
|
||||
|
||||
# Traer la ruta del sitio
|
||||
|
@ -177,31 +180,6 @@ class Site < ApplicationRecord
|
|||
end.flatten.uniq.compact
|
||||
end
|
||||
|
||||
# Las usuarias que tienen acceso a este sitio se guardan en un archivo
|
||||
# `.usuarias` que tiene la dirección de correo de cada una
|
||||
def usuarias_file
|
||||
File.join(path, '.usuarias')
|
||||
end
|
||||
|
||||
# Obtiene las usuarias que gestionan este sitio
|
||||
def usuarias
|
||||
@usuarias ||= File.read(usuarias_file).split("\n").map do |u|
|
||||
Usuaria.find(u)
|
||||
end
|
||||
end
|
||||
|
||||
def invitadxs_file
|
||||
File.join(path, '.invitadxs')
|
||||
end
|
||||
|
||||
def invitadxs
|
||||
return [] unless invitadxs?
|
||||
|
||||
@invitadxs ||= File.read(invitadxs_file).split("\n").map do |i|
|
||||
Invitadx.find_by_email(i)
|
||||
end
|
||||
end
|
||||
|
||||
def failed_file
|
||||
File.join(path, '.failed')
|
||||
end
|
||||
|
@ -358,4 +336,13 @@ class Site < ApplicationRecord
|
|||
|
||||
Jekyll::Site.new(config)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
# Carga el sitio Jekyll
|
||||
def load_jekyll!
|
||||
Dir.chdir(path) do
|
||||
@jekyll ||= Site.load_jekyll(Dir.pwd)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
12
app/models/site_translation.rb
Normal file
12
app/models/site_translation.rb
Normal file
|
@ -0,0 +1,12 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Una clase de I18n solo necesaria para Pundit
|
||||
#
|
||||
# ver app/policies/i18n.rb
|
||||
class SiteTranslation
|
||||
attr_reader :site
|
||||
|
||||
def initialize(site)
|
||||
@site = site
|
||||
end
|
||||
end
|
|
@ -1,23 +0,0 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Política de acceso a la traducción del sitio.
|
||||
#
|
||||
# TODO: Prohibir Invitades
|
||||
class I18nPolicy
|
||||
def initialize(usuarix, _i18n)
|
||||
@usuarix = usuarix
|
||||
end
|
||||
|
||||
# Solo las usuarias
|
||||
def index?
|
||||
true
|
||||
end
|
||||
|
||||
def edit?
|
||||
update?
|
||||
end
|
||||
|
||||
def update?
|
||||
true
|
||||
end
|
||||
end
|
|
@ -1,8 +1,6 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Política de acceso para sitios
|
||||
#
|
||||
# TODO: Distinguir entre Invitades
|
||||
class SitePolicy
|
||||
attr_reader :site, :usuarie
|
||||
|
||||
|
@ -11,19 +9,19 @@ class SitePolicy
|
|||
@site = site
|
||||
end
|
||||
|
||||
# Solo las usuarias
|
||||
# Todes les usuaries pueden ver sus propios sitios
|
||||
def index?
|
||||
true
|
||||
end
|
||||
|
||||
# Todxs lxs usuarixs pueden ver el sitio
|
||||
# Todes les usuaries pueden ver el sitio
|
||||
def show?
|
||||
true
|
||||
end
|
||||
|
||||
# Solo las usuarias
|
||||
# Les invitades no pueden generar el sitio
|
||||
def build?
|
||||
true
|
||||
!site.invitade?(usuarie)
|
||||
end
|
||||
|
||||
def send_public_file?
|
||||
|
@ -31,14 +29,14 @@ class SitePolicy
|
|||
end
|
||||
|
||||
def enqueue?
|
||||
true
|
||||
build?
|
||||
end
|
||||
|
||||
def build_log?
|
||||
true
|
||||
build?
|
||||
end
|
||||
|
||||
def reorder_posts?
|
||||
true
|
||||
build?
|
||||
end
|
||||
end
|
||||
|
|
24
app/policies/site_translation_policy.rb
Normal file
24
app/policies/site_translation_policy.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Política de acceso a la traducción del sitio.
|
||||
class SiteTranslationPolicy
|
||||
attr_reader :usuarie, :i18n
|
||||
|
||||
def initialize(usuarie, i18n)
|
||||
@usuarie = usuarie
|
||||
@i18n = i18n
|
||||
end
|
||||
|
||||
# Solo las usuarias
|
||||
def index?
|
||||
!i18n.site.invitade?(usuarie)
|
||||
end
|
||||
|
||||
def edit?
|
||||
index?
|
||||
end
|
||||
|
||||
def update?
|
||||
index?
|
||||
end
|
||||
end
|
|
@ -13,7 +13,12 @@
|
|||
- @sites.each do |site|
|
||||
%tr
|
||||
%td
|
||||
%h2= link_to site.name, site_path(site)
|
||||
%h2
|
||||
= link_to site.name, site_path(site)
|
||||
- if site.invitade? current_usuarie
|
||||
%span.badge.badge-warning{data: { toggle: 'tooltip' },
|
||||
title: t('help.sites.invitade')}
|
||||
= t('.invitade')
|
||||
%br
|
||||
.btn-group{role: 'group', 'aria-label': t('sites.actions')}
|
||||
- if policy(site).show?
|
||||
|
@ -22,7 +27,7 @@
|
|||
type: 'success',
|
||||
link: site_path(site),
|
||||
text: t('sites.posts')
|
||||
- if policy(:i18n).edit?
|
||||
- if policy(SiteTranslation.new(site)).edit?
|
||||
= render 'layouts/btn_with_tooltip',
|
||||
tooltip: t('help.sites.edit_translations'),
|
||||
text: t('i18n.edit'),
|
||||
|
|
|
@ -89,6 +89,7 @@ en:
|
|||
finishes."
|
||||
build_log: "This is the log for what happened during site
|
||||
generation. If there was an issue, you'll see it here."
|
||||
invitade: "Invited users can only add and modify entries but can't publish until reviewed by a user"
|
||||
close: 'Close help'
|
||||
markdown:
|
||||
intro: 'The text is formatted using a syntax called Markdown, a
|
||||
|
|
|
@ -99,6 +99,7 @@ es:
|
|||
avisándote cómo fue todo.'
|
||||
build_log: 'Este es el registro de lo que sucedió mientras se
|
||||
generaba el sitio. Si hubo algún problema, saldrá aquí.'
|
||||
invitade: 'Les invitades a un sitio solo pueden crear y modificar entradas propias y no pueden publicar sin la revisión de une usuarie'
|
||||
close: 'Cerrar ayuda'
|
||||
markdown:
|
||||
intro: 'El formato del texto se llama Markdown. Es un formato
|
||||
|
|
Loading…
Reference in a new issue