Restructure omni services and add Chatwoot research snapshot

This commit is contained in:
Ruslan Bakiev
2026-02-21 11:11:27 +07:00
parent edea7a0034
commit b73babbbf6
7732 changed files with 978203 additions and 32 deletions

View File

@@ -0,0 +1,37 @@
class AccountPolicy < ApplicationPolicy
def show?
@account_user.administrator? || @account_user.agent?
end
def cache_keys?
@account_user.administrator? || @account_user.agent?
end
def limits?
@account_user.administrator? || @account_user.agent?
end
def update?
@account_user.administrator?
end
def update_active_at?
true
end
def subscription?
@account_user.administrator?
end
def checkout?
@account_user.administrator?
end
def toggle_deletion?
@account_user.administrator?
end
def topup_checkout?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,29 @@
class AgentBotPolicy < ApplicationPolicy
def index?
@account_user.administrator? || @account_user.agent?
end
def update?
@account_user.administrator?
end
def show?
@account_user.administrator? || @account_user.agent?
end
def create?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
def avatar?
@account_user.administrator?
end
def reset_access_token?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,59 @@
class ApplicationPolicy
attr_reader :user_context, :user, :record, :account, :account_user
def initialize(user_context, record)
@user_context = user_context
@user = user_context[:user]
@account = user_context[:account]
@account_user = user_context[:account_user]
@record = record
end
def index?
false
end
def show?
scope.exists?(id: record.id)
end
def create?
false
end
def new?
create?
end
def update?
false
end
def edit?
update?
end
def destroy?
false
end
def scope
Pundit.policy_scope!(user_context, record.class)
end
class Scope
attr_reader :user_context, :user, :scope, :account, :account_user
def initialize(user_context, scope)
@user_context = user_context
@user = user_context[:user]
@account = user_context[:account]
@account_user = user_context[:account_user]
@scope = scope
end
def resolve
scope
end
end
end

View File

@@ -0,0 +1,31 @@
class ArticlePolicy < ApplicationPolicy
def index?
@account.users.include?(@user)
end
def update?
@account_user.administrator?
end
def show?
@account_user.administrator?
end
def edit?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
def reorder?
@account_user.administrator?
end
end
ArticlePolicy.prepend_mod_with('ArticlePolicy')

View File

@@ -0,0 +1,21 @@
class AssignmentPolicyPolicy < ApplicationPolicy
def index?
@account_user.administrator?
end
def show?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
def update?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,25 @@
class AutomationRulePolicy < ApplicationPolicy
def index?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
def show?
@account_user.administrator?
end
def update?
@account_user.administrator?
end
def clone?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,21 @@
class CampaignPolicy < ApplicationPolicy
def index?
@account_user.administrator?
end
def update?
@account_user.administrator?
end
def show?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,21 @@
class Captain::TasksPolicy < ApplicationPolicy
def rewrite?
true
end
def summarize?
true
end
def reply_suggestion?
true
end
def label_suggestion?
true
end
def follow_up?
true
end
end

View File

@@ -0,0 +1,27 @@
class CategoryPolicy < ApplicationPolicy
def index?
@account.users.include?(@user)
end
def update?
@account_user.administrator?
end
def show?
@account_user.administrator?
end
def edit?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
end
CategoryPolicy.prepend_mod_with('CategoryPolicy')

View File

@@ -0,0 +1,53 @@
class ContactPolicy < ApplicationPolicy
def index?
true
end
def active?
true
end
def import?
@account_user.administrator?
end
def export?
@account_user.administrator?
end
def search?
true
end
def filter?
true
end
def update?
true
end
def contactable_inboxes?
true
end
def destroy_custom_attributes?
true
end
def show?
true
end
def create?
true
end
def avatar?
true
end
def destroy?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,47 @@
class ConversationPolicy < ApplicationPolicy
def index?
true
end
def destroy?
administrator?
end
def show?
administrator? || agent_bot? || agent_can_view_conversation?
end
private
def agent_can_view_conversation?
inbox_access? || team_access?
end
def administrator?
account_user&.administrator?
end
def agent_bot?
user.is_a?(AgentBot)
end
def inbox_access?
user.inboxes.where(account_id: account&.id).exists?(id: record.inbox_id)
end
def team_access?
return false if record.team_id.blank?
user.teams.where(account_id: account&.id).exists?(id: record.team_id)
end
def assigned_to_user?
record.assignee_id == user.id
end
def participant?
record.conversation_participants.exists?(user_id: user.id)
end
end
ConversationPolicy.prepend_mod_with('ConversationPolicy')

View File

@@ -0,0 +1,15 @@
class CsatSurveyResponsePolicy < ApplicationPolicy
def index?
@account_user.administrator?
end
def metrics?
@account_user.administrator?
end
def download?
@account_user.administrator?
end
end
CsatSurveyResponsePolicy.prepend_mod_with('CsatSurveyResponsePolicy')

View File

@@ -0,0 +1,21 @@
class CustomFilterPolicy < ApplicationPolicy
def create?
@account_user.administrator? || @account_user.agent?
end
def show?
@account_user.administrator? || @account_user.agent?
end
def index?
@account_user.administrator? || @account_user.agent?
end
def update?
@account_user.administrator? || @account_user.agent?
end
def destroy?
@account_user.administrator? || @account_user.agent?
end
end

View File

@@ -0,0 +1,17 @@
class HookPolicy < ApplicationPolicy
def create?
@account_user.administrator?
end
def update?
@account_user.administrator?
end
def process_event?
true
end
def destroy?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,68 @@
class InboxPolicy < ApplicationPolicy
class Scope
attr_reader :user_context, :user, :scope, :account, :account_user
def initialize(user_context, scope)
@user_context = user_context
@user = user_context[:user]
@account = user_context[:account]
@account_user = user_context[:account_user]
@scope = scope
end
def resolve
user.assigned_inboxes
end
end
def index?
true
end
def show?
# FIXME: for agent bots, lets bring this validation to policies as well in future
return true if @user.is_a?(AgentBot)
Current.user.assigned_inboxes.include? record
end
def assignable_agents?
true
end
def agent_bot?
true
end
def campaigns?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
def update?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
def set_agent_bot?
@account_user.administrator?
end
def avatar?
@account_user.administrator?
end
def sync_templates?
@account_user.administrator?
end
def health?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,21 @@
class LabelPolicy < ApplicationPolicy
def index?
@account_user.administrator? || @account_user.agent?
end
def update?
@account_user.administrator?
end
def show?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,37 @@
class MacroPolicy < ApplicationPolicy
def index?
true
end
def create?
true
end
def show?
@record.global? || author?
end
def update?
author? || (@account_user.administrator? && @record.global?)
end
def destroy?
author? || orphan_record?
end
def execute?
@record.global? || author?
end
private
def author?
@record.created_by == @account_user.user
end
def orphan_record?
return @account_user.administrator? if @record.created_by.nil? && @record.global?
false
end
end

View File

@@ -0,0 +1,39 @@
class PortalPolicy < ApplicationPolicy
def index?
@account.users.include?(@user)
end
def update?
@account_user.administrator?
end
def show?
@account.users.include?(@user)
end
def edit?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
def logo?
@account_user.administrator?
end
def send_instructions?
@account_user.administrator?
end
def ssl_status?
@account.users.include?(@user)
end
end
PortalPolicy.prepend_mod_with('PortalPolicy')

View File

@@ -0,0 +1,7 @@
class ReportPolicy < ApplicationPolicy
def view?
@account_user.administrator?
end
end
ReportPolicy.prepend_mod_with('ReportPolicy')

View File

@@ -0,0 +1,17 @@
class TeamMemberPolicy < ApplicationPolicy
def index?
true
end
def create?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
def update?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,21 @@
class TeamPolicy < ApplicationPolicy
def index?
true
end
def update?
@account_user.administrator?
end
def show?
true
end
def create?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,21 @@
class UserPolicy < ApplicationPolicy
def index?
true
end
def create?
@account_user.administrator?
end
def update?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
def bulk_create?
@account_user.administrator?
end
end

View File

@@ -0,0 +1,17 @@
class WebhookPolicy < ApplicationPolicy
def index?
@account_user.administrator?
end
def update?
@account_user.administrator?
end
def destroy?
@account_user.administrator?
end
def create?
@account_user.administrator?
end
end