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

ver todos los sitios como usuarie y como invitade

This commit is contained in:
f 2019-07-03 21:47:59 -03:00
parent 15a92c1772
commit c804d386f0
No known key found for this signature in database
GPG key ID: 2AE5A13E321F953D
10 changed files with 74 additions and 65 deletions

View file

@ -19,7 +19,10 @@ class ApplicationController < ActionController::Base
def find_site def find_site
id = params[:site_id] || params[:id] 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 end
def find_post(site) def find_post(site)

View file

@ -8,7 +8,8 @@ class SitesController < ApplicationController
# Ver un listado de sitios # Ver un listado de sitios
def index def index
authorize Site authorize Site
@sites = current_usuarie.sites @sites = [current_usuarie.sites,
current_usuarie.sites_as_invitade].flatten
end end
# No tenemos propiedades de un sitio aún, así que vamos al listado de # No tenemos propiedades de un sitio aún, así que vamos al listado de

View file

@ -11,14 +11,17 @@ class Site < ApplicationRecord
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'
# Carga el sitio Jekyll una vez que se inicializa el modelo
after_initialize :load_jekyll! after_initialize :load_jekyll!
attr_accessor :jekyll, :collections attr_accessor :jekyll, :collections
def load_jekyll! def invitade?(usuarie)
Dir.chdir(path) do invitades.pluck(:id).include? usuarie.id
@jekyll ||= Site.load_jekyll(Dir.pwd) end
end
def usuarie?(usuarie)
usuaries.pluck(:id).include? usuarie.id
end end
# Traer la ruta del sitio # Traer la ruta del sitio
@ -177,31 +180,6 @@ class Site < ApplicationRecord
end.flatten.uniq.compact end.flatten.uniq.compact
end 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 def failed_file
File.join(path, '.failed') File.join(path, '.failed')
end end
@ -358,4 +336,13 @@ class Site < ApplicationRecord
Jekyll::Site.new(config) Jekyll::Site.new(config)
end end
private
# Carga el sitio Jekyll
def load_jekyll!
Dir.chdir(path) do
@jekyll ||= Site.load_jekyll(Dir.pwd)
end
end
end end

View 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

View file

@ -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

View file

@ -1,8 +1,6 @@
# frozen_string_literal: true # frozen_string_literal: true
# Política de acceso para sitios # Política de acceso para sitios
#
# TODO: Distinguir entre Invitades
class SitePolicy class SitePolicy
attr_reader :site, :usuarie attr_reader :site, :usuarie
@ -11,19 +9,19 @@ class SitePolicy
@site = site @site = site
end end
# Solo las usuarias # Todes les usuaries pueden ver sus propios sitios
def index? def index?
true true
end end
# Todxs lxs usuarixs pueden ver el sitio # Todes les usuaries pueden ver el sitio
def show? def show?
true true
end end
# Solo las usuarias # Les invitades no pueden generar el sitio
def build? def build?
true !site.invitade?(usuarie)
end end
def send_public_file? def send_public_file?
@ -31,14 +29,14 @@ class SitePolicy
end end
def enqueue? def enqueue?
true build?
end end
def build_log? def build_log?
true build?
end end
def reorder_posts? def reorder_posts?
true build?
end end
end end

View 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

View file

@ -13,7 +13,12 @@
- @sites.each do |site| - @sites.each do |site|
%tr %tr
%td %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 %br
.btn-group{role: 'group', 'aria-label': t('sites.actions')} .btn-group{role: 'group', 'aria-label': t('sites.actions')}
- if policy(site).show? - if policy(site).show?
@ -22,7 +27,7 @@
type: 'success', type: 'success',
link: site_path(site), link: site_path(site),
text: t('sites.posts') text: t('sites.posts')
- if policy(:i18n).edit? - if policy(SiteTranslation.new(site)).edit?
= render 'layouts/btn_with_tooltip', = render 'layouts/btn_with_tooltip',
tooltip: t('help.sites.edit_translations'), tooltip: t('help.sites.edit_translations'),
text: t('i18n.edit'), text: t('i18n.edit'),

View file

@ -89,6 +89,7 @@ en:
finishes." finishes."
build_log: "This is the log for what happened during site build_log: "This is the log for what happened during site
generation. If there was an issue, you'll see it here." 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' close: 'Close help'
markdown: markdown:
intro: 'The text is formatted using a syntax called Markdown, a intro: 'The text is formatted using a syntax called Markdown, a

View file

@ -99,6 +99,7 @@ es:
avisándote cómo fue todo.' avisándote cómo fue todo.'
build_log: 'Este es el registro de lo que sucedió mientras se build_log: 'Este es el registro de lo que sucedió mientras se
generaba el sitio. Si hubo algún problema, saldrá aquí.' 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' close: 'Cerrar ayuda'
markdown: markdown:
intro: 'El formato del texto se llama Markdown. Es un formato intro: 'El formato del texto se llama Markdown. Es un formato