Class: CrmAbility

Inherits:
Object
  • Object
show all
Includes:
CanCan::Ability
Defined in:
app/models/crm_ability.rb

Overview

Authorization rules for CRM users (Employees only).
Loaded by CrmController via current_ability; never evaluated for customer/
contact portal sessions.

Rules are grouped into private methods matching the domain section they cover.
All methods close over +party+, +account+, and +party_id+ set in +initialize+.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(party) ⇒ CrmAbility

Returns a new instance of CrmAbility.



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'app/models/crm_ability.rb', line 14

def initialize(party)
  @party   = party
  @account = party&.
  return unless  && party.is_a?(Employee)

  @party_id = party.id

  # Admin short-circuit: grant everything and return early.
  if .has_role?(%w[admin executive_manager])
    define_admin_abilities
    return
  end

  # Memoize role checks so repeated has_role? / is_*? calls don't re-traverse
  # inherited_role_names for each permission block.
  @is_employee          = .is_employee?
  @is_manager           = .is_manager?
  @is_accounting        = .has_role?(%w[accounting_rep accounting_manager])
  @is_accounting_manager = .is_accounting_manager?
  @is_sales_manager     = .is_sales_manager?
  @is_sales_rep         = .is_sales_rep?
  @is_warehouse         = .has_role?(%w[warehouse_rep warehouse_manager accounting_manager item_manager])
  @is_item_manager      = .is_item_manager?
  @is_marketing_rep     = .has_role?(%w[marketing_rep marketing_manager])
  @is_hr_manager        = .is_hr_manager?
  @is_hr_rep            = .is_hr_rep?
  @is_pto_manager       = .is_pto_manager?
  @is_pto_rep           = .is_pto_rep?
  @is_engineering_mgr   = .is_engineering_manager?
  @is_engineering_rep   = .is_engineering_rep?
  @is_document_maint    = .is_document_maintainer?
  @is_edi_admin         = .is_edi_admin?

  define_misc_employee_abilities
  define_accounting_abilities
  define_order_credit_abilities
  define_warehouse_abilities
  define_sales_manager_abilities
  define_sales_rep_abilities
  define_marketing_abilities
  define_technical_support_abilities
  define_item_manager_abilities
  define_data_specialist_abilities
  define_customer_ops_abilities
  define_edi_abilities
  define_hr_abilities
  define_pto_abilities
  define_training_abilities
  define_engineering_abilities
  define_document_maintainer_abilities
  define_manager_abilities
  define_employee_abilities if @is_employee
  define_receiver_abilities
  define_miscellaneous_abilities
end

Instance Attribute Details

#accountObject (readonly)

Returns the value of attribute account.



12
13
14
# File 'app/models/crm_ability.rb', line 12

def 
  @account
end

#partyObject (readonly)

Returns the value of attribute party.



12
13
14
# File 'app/models/crm_ability.rb', line 12

def party
  @party
end

#party_idObject (readonly)

Returns the value of attribute party_id.



12
13
14
# File 'app/models/crm_ability.rb', line 12

def party_id
  @party_id
end