مراية لـ
https://github.com/postalserver/postal.git
تم المزامنة 2025-11-30 21:32:30 +00:00
59 أسطر
1.4 KiB
Ruby
59 أسطر
1.4 KiB
Ruby
# == Schema Information
|
|
#
|
|
# Table name: organization_users
|
|
#
|
|
# id :integer not null, primary key
|
|
# organization_id :integer
|
|
# user_id :integer
|
|
# created_at :datetime
|
|
# admin :boolean default(FALSE)
|
|
# all_servers :boolean default(TRUE)
|
|
# user_type :string(255)
|
|
#
|
|
|
|
class OrganizationUser < ApplicationRecord
|
|
|
|
belongs_to :organization
|
|
belongs_to :user, :polymorphic => true, :optional => true
|
|
|
|
validate :validate_uniqueness
|
|
|
|
before_create :create_user_invite
|
|
after_destroy :remove_user_invites
|
|
|
|
def email_address
|
|
@email_address ||= user&.email_address
|
|
end
|
|
|
|
def email_address=(value)
|
|
@email_address = value
|
|
end
|
|
|
|
def create_user_invite
|
|
if self.user.nil?
|
|
user = UserInvite.where(:email_address => @email_address).first_or_initialize
|
|
if user.save
|
|
self.user = user
|
|
else
|
|
errors.add :base, user.errors.full_messages.to_sentence
|
|
throw :abort
|
|
end
|
|
end
|
|
end
|
|
|
|
def validate_uniqueness
|
|
if self.email_address.present?
|
|
if organization.organization_users.where.not(:id => self.id).any? { |ou| ou.user.email_address.upcase == self.email_address.upcase }
|
|
errors.add :email_address, "is already assigned or has an pending invite"
|
|
end
|
|
end
|
|
end
|
|
|
|
def remove_user_invites
|
|
if self.user.is_a?(UserInvite) && self.user.organizations.empty?
|
|
self.user.destroy
|
|
end
|
|
end
|
|
|
|
end
|