From 396935b0680b98aca38e1167cd745c7095a49271 Mon Sep 17 00:00:00 2001 From: Luan Jodar Date: Fri, 26 Jan 2018 14:54:31 -0200 Subject: [PATCH 1/5] Add migration alter cas_users to cas_people --- app/controllers/cas/activities_controller.rb | 2 +- app/controllers/cas/api/files_controller.rb | 2 +- app/controllers/cas/application_controller.rb | 14 ++-- .../cas/file_uploads_controller.rb | 2 +- .../cas/sites/people_controller.rb | 75 +++++++++++++++++++ .../sites/sections/application_controller.rb | 4 +- .../cas/sites/sections/contents_controller.rb | 6 +- app/controllers/cas/sites/users_controller.rb | 75 ------------------- app/models/cas/activity.rb | 2 +- app/models/cas/content.rb | 4 +- app/models/cas/media_file.rb | 2 +- app/models/cas/people_site.rb | 7 ++ app/models/cas/{user.rb => person.rb} | 10 +-- app/models/cas/site.rb | 4 +- app/models/cas/sites_user.rb | 7 -- app/views/layouts/cas/application.html.erb | 20 ++--- config/routes.rb | 8 +- ...123173810_alter_cas_users_to_cas_people.rb | 12 +++ lib/cas/section_config.rb | 4 +- lib/cas/setup.rb | 14 ++-- lib/devise/custom_failure.rb | 2 +- spec/test_app/db/schema.rb | 74 +++++++++--------- 22 files changed, 181 insertions(+), 169 deletions(-) create mode 100644 app/controllers/cas/sites/people_controller.rb delete mode 100644 app/controllers/cas/sites/users_controller.rb create mode 100644 app/models/cas/people_site.rb rename app/models/cas/{user.rb => person.rb} (83%) delete mode 100644 app/models/cas/sites_user.rb create mode 100644 db/migrate/20180123173810_alter_cas_users_to_cas_people.rb diff --git a/app/controllers/cas/activities_controller.rb b/app/controllers/cas/activities_controller.rb index 1a0d51b..2b624fa 100644 --- a/app/controllers/cas/activities_controller.rb +++ b/app/controllers/cas/activities_controller.rb @@ -1,7 +1,7 @@ class Cas::ActivitiesController < Cas::ApplicationController def index @activities = Cas::Activity - .where(site_id: current_user.sites.map(&:id)) + .where(site_id: current_person.sites.map(&:id)) .order('created_at DESC') .page(params[:page]) .per(25) diff --git a/app/controllers/cas/api/files_controller.rb b/app/controllers/cas/api/files_controller.rb index bc160fd..09b4fa8 100644 --- a/app/controllers/cas/api/files_controller.rb +++ b/app/controllers/cas/api/files_controller.rb @@ -1,5 +1,5 @@ class Cas::Api::FilesController < Cas::ApplicationController - skip_before_action :authenticate_user! + skip_before_action :authenticate_person! def create if ENV.fetch("S3_BUCKET") diff --git a/app/controllers/cas/application_controller.rb b/app/controllers/cas/application_controller.rb index 2424355..42cc1c2 100644 --- a/app/controllers/cas/application_controller.rb +++ b/app/controllers/cas/application_controller.rb @@ -1,20 +1,20 @@ module Cas class ApplicationController < ActionController::Base protect_from_forgery with: :exception - before_action :authenticate_user! - before_action :set_current_user - before_action :set_user_sites + before_action :authenticate_person! + before_action :set_current_person + before_action :set_person_sites before_action :set_domain before_action :set_site private - def set_current_user - @current_user = current_user + def set_current_person + @current_person = current_person end - def set_user_sites - @user_sites = @current_user.sites if @current_user.present? + def set_person_sites + @person_sites = @current_person.sites if @current_person.present? end def set_domain diff --git a/app/controllers/cas/file_uploads_controller.rb b/app/controllers/cas/file_uploads_controller.rb index 4d849aa..cb150cd 100644 --- a/app/controllers/cas/file_uploads_controller.rb +++ b/app/controllers/cas/file_uploads_controller.rb @@ -1,5 +1,5 @@ class Cas::FileUploadsController < Cas::ApplicationController - skip_before_action :authenticate_user! + skip_before_action :authenticate_person! skip_before_filter :verify_authenticity_token def create diff --git a/app/controllers/cas/sites/people_controller.rb b/app/controllers/cas/sites/people_controller.rb new file mode 100644 index 0000000..fb50cc0 --- /dev/null +++ b/app/controllers/cas/sites/people_controller.rb @@ -0,0 +1,75 @@ +require_dependency "cas/application_controller" + +module Cas + class Sites::PeopleController < Sites::ApplicationController + def index + @people = @site.people.order('name ASC') + end + + def new + @person = ::Cas::Person.new + get_selected_sites + end + + def create + @person = ::Cas::Person.new(person_params) + @person.roles = person_params[:roles] + @person.site_ids = person_params[:site_ids] + if @person.save + redirect_to site_people_url(@site) + else + get_selected_sites + render :new + end + end + + def edit + @person = ::Cas::Person.find(params[:id]) + get_selected_sites + end + + def update + @person = ::Cas::Person.find(params[:id]) + success = nil + @person.site_ids = person_params[:site_ids] + if person_params[:password].blank? && person_params[:password_confirmation].blank? + without_password = person_params.except(:password, :password_confirmation) + success = @person.update_without_password(without_password) + else + success = @person.update_attributes(person_params) + end + + if success + redirect_to site_people_url(@site) + else + get_selected_sites + render 'edit' + end + end + + private + + def person_params + site_ids = Array.wrap(params[:person][:site_ids]) << @site.id + params + .require(:person) + .permit( + :name, + :email, + :site_ids, + :password, + :password_confirmation, + :roles, + ) + .merge!( + roles: [params[:person][:roles]], + site_ids: (site_ids).uniq.keep_if(&:present?) + ) + end + + def get_selected_sites + @selected_sites = @person.sites.map(&:id) + @selected_sites << @site.id if @person.new_record? + end + end +end diff --git a/app/controllers/cas/sites/sections/application_controller.rb b/app/controllers/cas/sites/sections/application_controller.rb index 75d1936..b890451 100644 --- a/app/controllers/cas/sites/sections/application_controller.rb +++ b/app/controllers/cas/sites/sections/application_controller.rb @@ -10,8 +10,8 @@ def load_section def scope_content_by_role(model_relation = ::Cas::Content) # Only admins and editors can see other people's content - if !current_user.admin? && !current_user.editor? - model_relation = model_relation.where(author_id: current_user.id) + if !current_person.admin? && !current_person.editor? + model_relation = model_relation.where(author_id: current_person.id) end model_relation end diff --git a/app/controllers/cas/sites/sections/contents_controller.rb b/app/controllers/cas/sites/sections/contents_controller.rb index aff189c..8b5c00e 100644 --- a/app/controllers/cas/sites/sections/contents_controller.rb +++ b/app/controllers/cas/sites/sections/contents_controller.rb @@ -21,11 +21,11 @@ def create success = nil begin ActiveRecord::Base.transaction do - @content.author_id = current_user.id + @content.author_id = current_person.id @content.section_id = @section.id @content.tag_list = content_params[:tag_list] if content_params[:tag_list] success = @content.save! - ::Cas::Activity.create!(user: current_user, site: @site, subject: @content, event_name: 'create') + ::Cas::Activity.create!(person: current_person, site: @site, subject: @content, event_name: 'create') associate_files(@content, :images) associate_files(@content, :attachments) end @@ -63,7 +63,7 @@ def update success = @content.update!(content_params) associate_files(@content, :images) associate_files(@content, :attachments) - ::Cas::Activity.create!(user: current_user, site: @site, subject: @content, event_name: 'update') + ::Cas::Activity.create!(person: current_person, site: @site, subject: @content, event_name: 'update') end rescue ActiveRecord::RecordInvalid success = nil diff --git a/app/controllers/cas/sites/users_controller.rb b/app/controllers/cas/sites/users_controller.rb deleted file mode 100644 index c0a07f7..0000000 --- a/app/controllers/cas/sites/users_controller.rb +++ /dev/null @@ -1,75 +0,0 @@ -require_dependency "cas/application_controller" - -module Cas - class Sites::UsersController < Sites::ApplicationController - def index - @users = @site.users.order('name ASC') - end - - def new - @user = ::Cas::User.new - get_selected_sites - end - - def create - @user = ::Cas::User.new(user_params) - @user.roles = user_params[:roles] - @user.site_ids = user_params[:site_ids] - if @user.save - redirect_to site_users_url(@site) - else - get_selected_sites - render :new - end - end - - def edit - @user = ::Cas::User.find(params[:id]) - get_selected_sites - end - - def update - @user = ::Cas::User.find(params[:id]) - success = nil - @user.site_ids = user_params[:site_ids] - if user_params[:password].blank? && user_params[:password_confirmation].blank? - without_password = user_params.except(:password, :password_confirmation) - success = @user.update_without_password(without_password) - else - success = @user.update_attributes(user_params) - end - - if success - redirect_to site_users_url(@site) - else - get_selected_sites - render 'edit' - end - end - - private - - def user_params - site_ids = Array.wrap(params[:user][:site_ids]) << @site.id - params - .require(:user) - .permit( - :name, - :email, - :site_ids, - :password, - :password_confirmation, - :roles, - ) - .merge!( - roles: [params[:user][:roles]], - site_ids: (site_ids).uniq.keep_if(&:present?) - ) - end - - def get_selected_sites - @selected_sites = @user.sites.map(&:id) - @selected_sites << @site.id if @user.new_record? - end - end -end diff --git a/app/models/cas/activity.rb b/app/models/cas/activity.rb index 60cac7e..6581f21 100644 --- a/app/models/cas/activity.rb +++ b/app/models/cas/activity.rb @@ -1,7 +1,7 @@ module Cas class Activity < ApplicationRecord belongs_to :site - belongs_to :user + belongs_to :person belongs_to :subject, polymorphic: true end end diff --git a/app/models/cas/content.rb b/app/models/cas/content.rb index 969c4c0..7719051 100644 --- a/app/models/cas/content.rb +++ b/app/models/cas/content.rb @@ -11,8 +11,8 @@ class Content < ApplicationRecord belongs_to :section has_one :site, through: :section belongs_to :category - belongs_to :author, class_name: "::Cas::User" - has_many :images, ->{ where(media_type: :image).order("cas_media_files.order ASC") }, class_name: "::Cas::MediaFile", as: :attachable, dependent: :destroy + belongs_to :author, class_name: "::Cas::Person" + has_many :images, ->{ where(media_type: :image).order("cas_media_files.order ASC") }, class_name: Cas::MediaFile, as: :attachable, dependent: :destroy has_many :attachments, ->{ where(media_type: :attachment).order("cas_media_files.order ASC") }, class_name: "::Cas::MediaFile", as: :attachable, dependent: :destroy has_many :activities, as: :subject has_one :cover_image, ->{ where(media_type: :image, cover: true) }, class_name: "::Cas::MediaFile", as: :attachable diff --git a/app/models/cas/media_file.rb b/app/models/cas/media_file.rb index 75567de..591ffbb 100644 --- a/app/models/cas/media_file.rb +++ b/app/models/cas/media_file.rb @@ -6,7 +6,7 @@ class UnknownPath < StandardError; end class UnknownFileService < StandardError; end belongs_to :attachable, polymorphic: true - belongs_to :author, class_name: "::Cas::User" + belongs_to :author, class_name: "Cas::Person" before_validation :set_media_type before_save :set_image_as_unique_cover diff --git a/app/models/cas/people_site.rb b/app/models/cas/people_site.rb new file mode 100644 index 0000000..8d19b57 --- /dev/null +++ b/app/models/cas/people_site.rb @@ -0,0 +1,7 @@ +module Cas + class PeopleSite < ApplicationRecord + belongs_to :site + belongs_to :person + belongs_to :owner, class_name: '::Cas::Person' + end +end diff --git a/app/models/cas/user.rb b/app/models/cas/person.rb similarity index 83% rename from app/models/cas/user.rb rename to app/models/cas/person.rb index 4041d38..5cfccfd 100644 --- a/app/models/cas/user.rb +++ b/app/models/cas/person.rb @@ -1,14 +1,14 @@ module Cas - class User < ApplicationRecord - ROLES = %w[admin editor writer].freeze + class Person < ApplicationRecord + ROLES = %w[admin editor writer visitor].freeze devise :database_authenticatable, #:recoverable, :rememberable, :trackable, :validatable, request_keys: [:domain] has_many :contents - has_many :files, class_name: '::Cas::MediaFile', as: :attachable - has_many :sites_users, class_name: '::Cas::SitesUser' - has_many :sites, through: :sites_users + has_many :files, class_name: 'Cas::MediaFile', as: :attachable + has_many :people_site, class_name: 'Cas::PeopleSite' + has_many :sites, through: :people_site has_many :activities, as: :subject validates :name, presence: true, length: { maximum: 50 } diff --git a/app/models/cas/site.rb b/app/models/cas/site.rb index b45fd4a..318727f 100644 --- a/app/models/cas/site.rb +++ b/app/models/cas/site.rb @@ -4,7 +4,7 @@ class Site < ApplicationRecord friendly_id :name, use: :slugged has_many :sections, dependent: :destroy - has_many :sites_users, class_name: '::Cas::SitesUser' - has_many :users, through: :sites_users + has_many :people_site, class_name: '::Cas::PeopleSite' + has_many :people, through: :people_site end end diff --git a/app/models/cas/sites_user.rb b/app/models/cas/sites_user.rb deleted file mode 100644 index c026700..0000000 --- a/app/models/cas/sites_user.rb +++ /dev/null @@ -1,7 +0,0 @@ -module Cas - class SitesUser < ApplicationRecord - belongs_to :site - belongs_to :user - belongs_to :owner, class_name: '::Cas::User' - end -end diff --git a/app/views/layouts/cas/application.html.erb b/app/views/layouts/cas/application.html.erb index a67da40..6f60c23 100644 --- a/app/views/layouts/cas/application.html.erb +++ b/app/views/layouts/cas/application.html.erb @@ -26,7 +26,7 @@ <%= csrf_meta_tags %> -"> +">
@@ -36,13 +36,13 @@
- <% if user_signed_in? %> + <% if person_signed_in? %>
- <% if @user_sites.count <= 1 %> - <%= @user_sites[0].name %> (<%= @user_sites[0].domains.join(", ") %>) + <% if @person_sites.count <= 1 %> + <%= @person_sites[0].name %> (<%= @person_sites[0].domains.join(", ") %>) <% else %>