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
|
usuarie = Usuarie.invite! email: invitacion.address
|
||||||
|
|
||||||
# No invitar al sitio si ya estaba en la lista!
|
# No invitar al sitio si ya estaba en la lista!
|
||||||
unless @site.invitade?(usuarie) || @site.usuarie?(usuarie)
|
next if @site.invitade?(usuarie) || @site.usuarie?(usuarie)
|
||||||
@site.send(invited_as) << usuarie
|
|
||||||
end
|
@site.roles << Rol.create(usuarie: usuarie, site: @site,
|
||||||
|
temporal: true, rol: invited_as)
|
||||||
end
|
end
|
||||||
|
|
||||||
redirect_to site_usuaries_path(@site)
|
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ó
|
# El tipo de invitación que tenemos que enviar, si alguien mandó
|
||||||
# cualquier cosa, usamos el privilegio menor.
|
# cualquier cosa, usamos el privilegio menor.
|
||||||
def invited_as
|
def invited_as
|
||||||
invited_as = params[:invited_as].try(:to_sym)
|
if Rol::ROLES.include?(params[:invited_as])
|
||||||
invited_as = :invitades unless %i[usuaries invitades].include?(invited_as)
|
params[:invited_as]
|
||||||
|
else
|
||||||
invited_as
|
'invitade'
|
||||||
|
end
|
||||||
end
|
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]
|
friendly_id :name, use: %i[finders]
|
||||||
|
|
||||||
|
has_many :roles
|
||||||
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'
|
||||||
|
|
|
@ -8,6 +8,7 @@ class Usuarie < ApplicationRecord
|
||||||
|
|
||||||
validates_uniqueness_of :email
|
validates_uniqueness_of :email
|
||||||
|
|
||||||
|
has_many :roles
|
||||||
has_and_belongs_to_many :sites
|
has_and_belongs_to_many :sites
|
||||||
has_and_belongs_to_many :sites_as_invitade,
|
has_and_belongs_to_many :sites_as_invitade,
|
||||||
class_name: 'Site',
|
class_name: 'Site',
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
.row
|
.row
|
||||||
.col
|
.col
|
||||||
= form_with url: site_usuaries_invite_path(@site) do |f|
|
= 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
|
.form-group
|
||||||
= f.label :invitaciones do
|
= f.label :invitaciones do
|
||||||
= t('.invitaciones')
|
= t('.invitaciones')
|
||||||
|
|
|
@ -7,6 +7,8 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
|
||||||
inflect.singular 'invitades', 'invitade'
|
inflect.singular 'invitades', 'invitade'
|
||||||
inflect.plural 'usuarie', 'usuaries'
|
inflect.plural 'usuarie', 'usuaries'
|
||||||
inflect.singular 'usuaries', 'usuarie'
|
inflect.singular 'usuaries', 'usuarie'
|
||||||
|
inflect.plural 'rol', 'roles'
|
||||||
|
inflect.singular 'roles', 'rol'
|
||||||
end
|
end
|
||||||
|
|
||||||
ActiveSupport::Inflector.inflections(:es) do |inflect|
|
ActiveSupport::Inflector.inflections(:es) do |inflect|
|
||||||
|
@ -16,4 +18,6 @@ ActiveSupport::Inflector.inflections(:es) do |inflect|
|
||||||
inflect.singular 'invitades', 'invitade'
|
inflect.singular 'invitades', 'invitade'
|
||||||
inflect.plural 'usuarie', 'usuaries'
|
inflect.plural 'usuarie', 'usuaries'
|
||||||
inflect.singular 'usuaries', 'usuarie'
|
inflect.singular 'usuaries', 'usuarie'
|
||||||
|
inflect.plural 'rol', 'roles'
|
||||||
|
inflect.singular 'roles', 'rol'
|
||||||
end
|
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.
|
# 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|
|
create_table 'invitades_sites', id: false, force: :cascade do |t|
|
||||||
t.integer 'site_id'
|
t.integer 'site_id'
|
||||||
t.integer 'usuarie_id'
|
t.integer 'usuarie_id'
|
||||||
t.index %w[site_id usuarie_id], name: 'index_invitades_sites_on_site_id_and_usuarie_id', unique: true
|
t.index %w[site_id usuarie_id], name: 'index_invitades_sites_on_site_id_and_usuarie_id', unique: true
|
||||||
end
|
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|
|
create_table 'sites', force: :cascade do |t|
|
||||||
t.datetime 'created_at', null: false
|
t.datetime 'created_at', null: false
|
||||||
t.datetime 'updated_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.
|
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
|
### Invitades desde la web
|
||||||
|
|
||||||
Al publicar la URL de invitación, les invitades se puedan registrar
|
Al publicar la URL de invitación, les invitades se puedan registrar
|
||||||
|
|
Loading…
Reference in a new issue