empezar a migrar a roles, que nos permiten otras cosas
This commit is contained in:
parent
64fcf61c67
commit
e485971940
9 changed files with 68 additions and 9 deletions
|
@ -74,9 +74,10 @@ class UsuariesController < ApplicationController
|
|||
usuarie = Usuarie.invite! email: invitacion.address
|
||||
|
||||
# No invitar al sitio si ya estaba en la lista!
|
||||
unless @site.invitade?(usuarie) || @site.usuarie?(usuarie)
|
||||
@site.send(invited_as) << usuarie
|
||||
end
|
||||
next if @site.invitade?(usuarie) || @site.usuarie?(usuarie)
|
||||
|
||||
@site.roles << Rol.create(usuarie: usuarie, site: @site,
|
||||
temporal: true, rol: invited_as)
|
||||
end
|
||||
|
||||
redirect_to site_usuaries_path(@site)
|
||||
|
@ -101,9 +102,10 @@ class UsuariesController < ApplicationController
|
|||
# El tipo de invitación que tenemos que enviar, si alguien mandó
|
||||
# cualquier cosa, usamos el privilegio menor.
|
||||
def invited_as
|
||||
invited_as = params[:invited_as].try(:to_sym)
|
||||
invited_as = :invitades unless %i[usuaries invitades].include?(invited_as)
|
||||
|
||||
invited_as
|
||||
if Rol::ROLES.include?(params[:invited_as])
|
||||
params[:invited_as]
|
||||
else
|
||||
'invitade'
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
14
app/models/rol.rb
Normal file
14
app/models/rol.rb
Normal file
|
@ -0,0 +1,14 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Define el rol que tiene una usuaria en un sitio
|
||||
#
|
||||
# Un rol puede ser temporal, es decir que aun no se ha aceptado y
|
||||
# necesita del consentimiento de le usuarie :)
|
||||
class Rol < ApplicationRecord
|
||||
ROLES = %w[usuarie invitade].freeze
|
||||
|
||||
belongs_to :usuarie
|
||||
belongs_to :site
|
||||
|
||||
validates_inclusion_of :rol, in: ROLES
|
||||
end
|
|
@ -7,6 +7,7 @@ class Site < ApplicationRecord
|
|||
|
||||
friendly_id :name, use: %i[finders]
|
||||
|
||||
has_many :roles
|
||||
has_and_belongs_to_many :usuaries, class_name: 'Usuarie'
|
||||
has_and_belongs_to_many :invitades, class_name: 'Usuarie',
|
||||
join_table: 'invitades_sites'
|
||||
|
|
|
@ -8,6 +8,7 @@ class Usuarie < ApplicationRecord
|
|||
|
||||
validates_uniqueness_of :email
|
||||
|
||||
has_many :roles
|
||||
has_and_belongs_to_many :sites
|
||||
has_and_belongs_to_many :sites_as_invitade,
|
||||
class_name: 'Site',
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
.row
|
||||
.col
|
||||
= form_with url: site_usuaries_invite_path(@site) do |f|
|
||||
= f.hidden_field :invite_as, value: params[:invite_as]
|
||||
= f.hidden_field :invited_as, value: params[:invite_as].singularize
|
||||
.form-group
|
||||
= f.label :invitaciones do
|
||||
= t('.invitaciones')
|
||||
|
|
|
@ -7,6 +7,8 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
|
|||
inflect.singular 'invitades', 'invitade'
|
||||
inflect.plural 'usuarie', 'usuaries'
|
||||
inflect.singular 'usuaries', 'usuarie'
|
||||
inflect.plural 'rol', 'roles'
|
||||
inflect.singular 'roles', 'rol'
|
||||
end
|
||||
|
||||
ActiveSupport::Inflector.inflections(:es) do |inflect|
|
||||
|
@ -16,4 +18,6 @@ ActiveSupport::Inflector.inflections(:es) do |inflect|
|
|||
inflect.singular 'invitades', 'invitade'
|
||||
inflect.plural 'usuarie', 'usuaries'
|
||||
inflect.singular 'usuaries', 'usuarie'
|
||||
inflect.plural 'rol', 'roles'
|
||||
inflect.singular 'roles', 'rol'
|
||||
end
|
||||
|
|
17
db/migrate/20190706000159_create_roles.rb
Normal file
17
db/migrate/20190706000159_create_roles.rb
Normal file
|
@ -0,0 +1,17 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
# Crea la tabla de roles
|
||||
class CreateRoles < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :roles do |t|
|
||||
t.timestamps
|
||||
t.belongs_to :site
|
||||
t.belongs_to :usuarie
|
||||
t.string :rol
|
||||
t.boolean :temporal
|
||||
|
||||
# Solo podemos tener un rol a la vez
|
||||
t.index %i[site_id usuarie_id], unique: true
|
||||
end
|
||||
end
|
||||
end
|
14
db/schema.rb
14
db/schema.rb
|
@ -12,13 +12,25 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 20_190_705_215_536) do
|
||||
ActiveRecord::Schema.define(version: 20_190_706_000_159) do
|
||||
create_table 'invitades_sites', id: false, force: :cascade do |t|
|
||||
t.integer 'site_id'
|
||||
t.integer 'usuarie_id'
|
||||
t.index %w[site_id usuarie_id], name: 'index_invitades_sites_on_site_id_and_usuarie_id', unique: true
|
||||
end
|
||||
|
||||
create_table 'roles', force: :cascade do |t|
|
||||
t.datetime 'created_at', null: false
|
||||
t.datetime 'updated_at', null: false
|
||||
t.integer 'site_id'
|
||||
t.integer 'usuarie_id'
|
||||
t.string 'rol'
|
||||
t.boolean 'temporal'
|
||||
t.index %w[site_id usuarie_id], name: 'index_roles_on_site_id_and_usuarie_id', unique: true
|
||||
t.index ['site_id'], name: 'index_roles_on_site_id'
|
||||
t.index ['usuarie_id'], name: 'index_roles_on_usuarie_id'
|
||||
end
|
||||
|
||||
create_table 'sites', force: :cascade do |t|
|
||||
t.datetime 'created_at', null: false
|
||||
t.datetime 'updated_at', null: false
|
||||
|
|
|
@ -58,6 +58,14 @@ momento, sino se pueden loguear normalmente.
|
|||
|
||||
Si ya están logueades, se acepta la invitación inmediatamente.
|
||||
|
||||
Para poder hacer una invitación con consentimiento, se guarda la
|
||||
relación en una tabla aparte. Cuando la usuaria acepta la invitación
|
||||
esa relación se borra y se aplican los cambios.
|
||||
|
||||
En el futuro cambiaríamos el sistema de permisos separados que tenemos
|
||||
ahora por una tabla de roles (por qué no la hicimos desde el principio!)
|
||||
con un campo binario que indique si ya se aceptó la invitación o no.
|
||||
|
||||
### Invitades desde la web
|
||||
|
||||
Al publicar la URL de invitación, les invitades se puedan registrar
|
||||
|
|
Loading…
Reference in a new issue