Extract Project::Accessible
This commit is contained in:
@@ -6,14 +6,12 @@ class Projects::AccessesController < ApplicationController
|
||||
end
|
||||
|
||||
def update
|
||||
update_access
|
||||
redirect_to project_access_url(@project)
|
||||
@project.update_access [ Current.user, *find_users ]
|
||||
redirect_to edit_project_access_url(@project)
|
||||
end
|
||||
|
||||
private
|
||||
def update_access
|
||||
users = Current.account.users.active.find([ Current.user.id, *params[:user_ids] ])
|
||||
users.each { |user| @project.accesses.create_or_find_by!(user: user) }
|
||||
@project.accesses.where.not(user: users).destroy_all
|
||||
def find_users
|
||||
Current.account.users.active.where(id: params[:user_ids])
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
class Project < ApplicationRecord
|
||||
include Accessible
|
||||
|
||||
belongs_to :account
|
||||
belongs_to :creator, class_name: "User", default: -> { Current.user }
|
||||
|
||||
has_many :accesses, dependent: :destroy
|
||||
has_many :users, through: :accesses
|
||||
|
||||
has_many :bubbles, dependent: :destroy
|
||||
|
||||
after_create do
|
||||
accesses.create!(user: creator)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
module Project::Accessible
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
has_many :accesses, dependent: :destroy
|
||||
has_many :users, through: :accesses
|
||||
|
||||
after_create -> { grant_access(creator) }
|
||||
end
|
||||
|
||||
def update_access(users)
|
||||
transaction do
|
||||
grant_access(users)
|
||||
accesses.where.not(user: Array(users)).delete_all
|
||||
end
|
||||
end
|
||||
|
||||
def grant_access(users)
|
||||
Array(users).each do |user|
|
||||
accesses.create_or_find_by!(user: user)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user