solidus_core 4.4.2 → 4.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/spree/core/controller_helpers/auth.rb +66 -0
- data/app/helpers/spree/core/controller_helpers/common.rb +82 -0
- data/app/helpers/spree/core/controller_helpers/order.rb +86 -0
- data/app/helpers/spree/core/controller_helpers/payment_parameters.rb +165 -0
- data/app/helpers/spree/core/controller_helpers/pricing.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/search.rb +16 -0
- data/app/helpers/spree/core/controller_helpers/store.rb +19 -0
- data/app/helpers/spree/core/controller_helpers/strong_parameters.rb +74 -0
- data/app/models/concerns/spree/metadata.rb +64 -0
- data/app/models/concerns/spree/user_address_book.rb +4 -5
- data/app/models/spree/core/state_machines/inventory_unit.rb +42 -0
- data/app/models/spree/core/state_machines/order/class_methods.rb +217 -0
- data/app/models/spree/core/state_machines/order.rb +42 -0
- data/app/models/spree/core/state_machines/payment.rb +61 -0
- data/app/models/spree/core/state_machines/reimbursement.rb +33 -0
- data/app/models/spree/core/state_machines/return_authorization.rb +32 -0
- data/app/models/spree/core/state_machines/return_item/acceptance_status.rb +51 -0
- data/app/models/spree/core/state_machines/return_item/reception_status.rb +42 -0
- data/app/models/spree/core/state_machines/shipment.rb +58 -0
- data/app/models/spree/customer_return.rb +2 -0
- data/app/models/spree/item_total.rb +28 -0
- data/app/models/spree/legacy_user.rb +1 -0
- data/app/models/spree/line_item.rb +21 -0
- data/app/models/spree/money.rb +120 -0
- data/app/models/spree/order.rb +20 -9
- data/app/models/spree/order_merger.rb +1 -1
- data/app/models/spree/order_taxation.rb +1 -0
- data/app/models/spree/order_updater.rb +13 -30
- data/app/models/spree/payment.rb +1 -0
- data/app/models/spree/permission_sets/base.rb +45 -0
- data/app/models/spree/permission_sets/configuration_display.rb +53 -0
- data/app/models/spree/permission_sets/configuration_management.rb +52 -0
- data/app/models/spree/permission_sets/dashboard_display.rb +28 -0
- data/app/models/spree/permission_sets/default_customer.rb +83 -0
- data/app/models/spree/permission_sets/order_display.rb +50 -0
- data/app/models/spree/permission_sets/order_management.rb +50 -0
- data/app/models/spree/permission_sets/product_display.rb +43 -0
- data/app/models/spree/permission_sets/product_management.rb +47 -0
- data/app/models/spree/permission_sets/restricted_stock_display.rb +33 -0
- data/app/models/spree/permission_sets/restricted_stock_management.rb +33 -0
- data/app/models/spree/permission_sets/stock_display.rb +26 -0
- data/app/models/spree/permission_sets/stock_management.rb +26 -0
- data/app/models/spree/permission_sets/super_user.rb +26 -0
- data/app/models/spree/permission_sets/user_display.rb +27 -0
- data/app/models/spree/permission_sets/user_management.rb +44 -0
- data/app/models/spree/product.rb +7 -0
- data/app/models/spree/refund.rb +2 -0
- data/app/models/spree/return_authorization.rb +2 -0
- data/app/models/spree/shipment.rb +2 -0
- data/app/models/spree/simple_order_contents.rb +4 -1
- data/app/models/spree/store_credit_event.rb +1 -0
- data/app/models/spree/tax/tax_helpers.rb +12 -1
- data/app/models/spree/tax_calculator/default.rb +1 -1
- data/app/models/spree/taxon.rb +22 -2
- data/app/models/spree/taxon_brand_selector.rb +22 -0
- data/app/models/spree/unauthorized_redirect_handler.rb +24 -0
- data/app/models/spree/user_address.rb +9 -3
- data/app/models/spree/variant.rb +14 -1
- data/config/locales/en.yml +14 -0
- data/db/migrate/20220419170826_remove_archived_user_addresses.rb +12 -0
- data/db/migrate/20250129061658_add_metadata_to_spree_resources.rb +29 -0
- data/db/migrate/20250201172950_add_gtin_and_condition_to_spree_variant.rb +6 -0
- data/db/migrate/20250207104016_add_primary_taxon_to_products.rb +7 -0
- data/lib/generators/solidus/install/app_templates/authentication/custom.rb +0 -5
- data/lib/generators/solidus/install/app_templates/frontend/starter.rb +1 -1
- data/lib/generators/spree/dummy/dummy_generator.rb +1 -1
- data/lib/generators/spree/dummy/templates/rails/application.rb.tt +1 -1
- data/lib/generators/spree/dummy/templates/rails/manifest.js +3 -0
- data/lib/spree/app_configuration.rb +49 -0
- data/lib/spree/core/controller_helpers/auth.rb +5 -61
- data/lib/spree/core/controller_helpers/common.rb +5 -80
- data/lib/spree/core/controller_helpers/order.rb +5 -86
- data/lib/spree/core/controller_helpers/payment_parameters.rb +5 -163
- data/lib/spree/core/controller_helpers/pricing.rb +5 -17
- data/lib/spree/core/controller_helpers/search.rb +5 -14
- data/lib/spree/core/controller_helpers/store.rb +5 -17
- data/lib/spree/core/controller_helpers/strong_parameters.rb +5 -71
- data/lib/spree/core/engine.rb +5 -0
- data/lib/spree/core/state_machines/inventory_unit.rb +5 -40
- data/lib/spree/core/state_machines/order.rb +5 -250
- data/lib/spree/core/state_machines/payment.rb +5 -59
- data/lib/spree/core/state_machines/reimbursement.rb +5 -31
- data/lib/spree/core/state_machines/return_authorization.rb +5 -30
- data/lib/spree/core/state_machines/return_item/acceptance_status.rb +5 -49
- data/lib/spree/core/state_machines/return_item/reception_status.rb +5 -40
- data/lib/spree/core/state_machines/shipment.rb +5 -56
- data/lib/spree/core/state_machines.rb +48 -81
- data/lib/spree/core/version.rb +2 -2
- data/lib/spree/core.rb +0 -10
- data/lib/spree/money.rb +5 -118
- data/lib/spree/permission_sets/base.rb +5 -42
- data/lib/spree/permission_sets/configuration_display.rb +5 -51
- data/lib/spree/permission_sets/configuration_management.rb +5 -50
- data/lib/spree/permission_sets/dashboard_display.rb +5 -26
- data/lib/spree/permission_sets/default_customer.rb +5 -81
- data/lib/spree/permission_sets/order_display.rb +5 -48
- data/lib/spree/permission_sets/order_management.rb +5 -48
- data/lib/spree/permission_sets/product_display.rb +5 -41
- data/lib/spree/permission_sets/product_management.rb +5 -45
- data/lib/spree/permission_sets/restricted_stock_display.rb +5 -31
- data/lib/spree/permission_sets/restricted_stock_management.rb +5 -31
- data/lib/spree/permission_sets/stock_display.rb +5 -24
- data/lib/spree/permission_sets/stock_management.rb +5 -24
- data/lib/spree/permission_sets/super_user.rb +5 -24
- data/lib/spree/permission_sets/user_display.rb +5 -25
- data/lib/spree/permission_sets/user_management.rb +5 -42
- data/lib/spree/permission_sets.rb +5 -16
- data/lib/spree/permitted_attributes.rb +18 -7
- data/lib/spree/preferences/configuration.rb +4 -0
- data/lib/spree/preferences/persistable.rb +1 -1
- data/lib/spree/testing_support/capybara_ext.rb +10 -0
- data/lib/spree/testing_support/dummy_app.rb +1 -1
- data/lib/spree/testing_support/factories/order_factory.rb +9 -1
- data/solidus_core.gemspec +1 -1
- metadata +64 -24
- data/lib/generators/spree/dummy/templates/rails/script/rails +0 -6
@@ -0,0 +1,120 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
# Spree::Money is a relatively thin wrapper around Monetize which handles
|
5
|
+
# formatting via Spree::Config.
|
6
|
+
class Money
|
7
|
+
include Comparable
|
8
|
+
DifferentCurrencyError = Class.new(StandardError)
|
9
|
+
|
10
|
+
class << self
|
11
|
+
attr_accessor :default_formatting_rules
|
12
|
+
|
13
|
+
def parse(amount, currency = Spree::Config[:currency])
|
14
|
+
new(parse_to_money(amount, currency))
|
15
|
+
end
|
16
|
+
|
17
|
+
# @api private
|
18
|
+
def parse_to_money(amount, currency)
|
19
|
+
::Monetize.parse(amount, currency)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
self.default_formatting_rules = {
|
23
|
+
# Ruby money currently has this as false, which is wrong for the vast
|
24
|
+
# majority of locales.
|
25
|
+
sign_before_symbol: true
|
26
|
+
}
|
27
|
+
|
28
|
+
attr_reader :money
|
29
|
+
|
30
|
+
delegate :cents, :currency, :to_d, :zero?, to: :money
|
31
|
+
|
32
|
+
# @param amount [Money, #to_s] the value of the money object
|
33
|
+
# @param options [Hash] the default options for formatting the money object See #format
|
34
|
+
def initialize(amount, options = {})
|
35
|
+
if amount.is_a?(::Money)
|
36
|
+
@money = amount
|
37
|
+
else
|
38
|
+
currency = options[:currency] || Spree::Config[:currency]
|
39
|
+
|
40
|
+
@money = Monetize.from_string(amount, currency)
|
41
|
+
end
|
42
|
+
@options = Spree::Money.default_formatting_rules.merge(options)
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [String] the value of this money object formatted according to
|
46
|
+
# its options
|
47
|
+
def to_s
|
48
|
+
format
|
49
|
+
end
|
50
|
+
|
51
|
+
# @param options [Hash, String] the options for formatting the money object
|
52
|
+
# @option options [Boolean] with_currency when true, show the currency
|
53
|
+
# @option options [Boolean] no_cents when true, round to the closest dollar
|
54
|
+
# @option options [String] decimal_mark the mark for delimiting the
|
55
|
+
# decimals
|
56
|
+
# @option options [String, false, nil] thousands_separator the character to
|
57
|
+
# delimit powers of 1000, if one is desired, otherwise false or nil
|
58
|
+
# @option options [Boolean] sign_before_symbol when true the sign of the
|
59
|
+
# value comes before the currency symbol
|
60
|
+
# @option options [:before, :after] symbol_position the position of the
|
61
|
+
# currency symbol
|
62
|
+
# @return [String] the value of this money object formatted according to
|
63
|
+
# its options
|
64
|
+
def format(options = {})
|
65
|
+
@money.format(@options.merge(options))
|
66
|
+
end
|
67
|
+
|
68
|
+
# @note If you pass in options, ensure you pass in the { html_wrap: true } as well.
|
69
|
+
# @param options [Hash] additional formatting options
|
70
|
+
# @return [String] the value of this money object formatted according to
|
71
|
+
# its options and any additional options, by default with html_wrap.
|
72
|
+
def to_html(options = { html_wrap: true })
|
73
|
+
output = format(options)
|
74
|
+
# Maintain compatibility by checking html option renamed to html_wrap.
|
75
|
+
if options[:html_wrap]
|
76
|
+
output = output.html_safe
|
77
|
+
end
|
78
|
+
output
|
79
|
+
end
|
80
|
+
|
81
|
+
# (see #to_s)
|
82
|
+
def as_json(*)
|
83
|
+
to_s
|
84
|
+
end
|
85
|
+
|
86
|
+
def <=>(other)
|
87
|
+
if !other.respond_to?(:money)
|
88
|
+
raise TypeError, "Can't compare #{other.class} to Spree::Money"
|
89
|
+
end
|
90
|
+
if currency != other.currency
|
91
|
+
# By default, ::Money will try to run a conversion on `other.money` and
|
92
|
+
# try a comparison on that. We do not want any currency conversion to
|
93
|
+
# take place so we'll catch this here and raise an error.
|
94
|
+
raise(
|
95
|
+
DifferentCurrencyError,
|
96
|
+
"Can't compare #{currency} with #{other.currency}"
|
97
|
+
)
|
98
|
+
end
|
99
|
+
@money <=> other.money
|
100
|
+
end
|
101
|
+
|
102
|
+
# Delegates comparison to the internal ruby money instance.
|
103
|
+
#
|
104
|
+
# @see http://www.rubydoc.info/gems/money/Money/Arithmetic#%3D%3D-instance_method
|
105
|
+
def ==(other)
|
106
|
+
raise TypeError, "Can't compare #{other.class} to Spree::Money" if !other.respond_to?(:money)
|
107
|
+
@money == other.money
|
108
|
+
end
|
109
|
+
|
110
|
+
def -(other)
|
111
|
+
raise TypeError, "Can't subtract #{other.class} to Spree::Money" if !other.respond_to?(:money)
|
112
|
+
self.class.new(@money - other.money)
|
113
|
+
end
|
114
|
+
|
115
|
+
def +(other)
|
116
|
+
raise TypeError, "Can't add #{other.class} to Spree::Money" if !other.respond_to?(:money)
|
117
|
+
self.class.new(@money + other.money)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
data/app/models/spree/order.rb
CHANGED
@@ -26,6 +26,7 @@ module Spree
|
|
26
26
|
include ::Spree::Config.state_machines.order
|
27
27
|
|
28
28
|
include Spree::Order::Payments
|
29
|
+
include Metadata
|
29
30
|
|
30
31
|
class InsufficientStock < StandardError
|
31
32
|
attr_reader :items
|
@@ -163,8 +164,24 @@ module Spree
|
|
163
164
|
delegate :name, to: :bill_address, prefix: true, allow_nil: true
|
164
165
|
alias_method :billing_name, :bill_address_name
|
165
166
|
|
166
|
-
|
167
|
-
|
167
|
+
delegate :line_item_comparison_hooks, to: :class
|
168
|
+
class << self
|
169
|
+
def line_item_comparison_hooks=(value)
|
170
|
+
Spree::Config.line_item_comparison_hooks = value.to_a
|
171
|
+
end
|
172
|
+
line_item_hooks_deprecation_msg = "Use Spree::Config.line_item_comparison_hooks instead."
|
173
|
+
deprecate :line_item_comparison_hooks= => line_item_hooks_deprecation_msg, :deprecator => Spree.deprecator
|
174
|
+
|
175
|
+
def line_item_comparison_hooks
|
176
|
+
Spree::Config.line_item_comparison_hooks
|
177
|
+
end
|
178
|
+
deprecate line_item_comparison_hooks: line_item_hooks_deprecation_msg, deprecator: Spree.deprecator
|
179
|
+
|
180
|
+
def register_line_item_comparison_hook(hook)
|
181
|
+
Spree::Config.line_item_comparison_hooks << hook
|
182
|
+
end
|
183
|
+
deprecate register_line_item_comparison_hook: line_item_hooks_deprecation_msg, deprecator: Spree.deprecator
|
184
|
+
end
|
168
185
|
|
169
186
|
scope :created_between, ->(start_date, end_date) { where(created_at: start_date..end_date) }
|
170
187
|
scope :completed_between, ->(start_date, end_date) { where(completed_at: start_date..end_date) }
|
@@ -198,12 +215,6 @@ module Spree
|
|
198
215
|
where.not(state: 'canceled')
|
199
216
|
end
|
200
217
|
|
201
|
-
# Use this method in other gems that wish to register their own custom logic
|
202
|
-
# that should be called when determining if two line items are equal.
|
203
|
-
def self.register_line_item_comparison_hook(hook)
|
204
|
-
line_item_comparison_hooks.add(hook)
|
205
|
-
end
|
206
|
-
|
207
218
|
# For compatiblity with Calculator::PriceSack
|
208
219
|
def amount
|
209
220
|
line_items.sum(&:amount)
|
@@ -356,7 +367,7 @@ module Spree
|
|
356
367
|
def line_item_options_match(line_item, options)
|
357
368
|
return true unless options
|
358
369
|
|
359
|
-
line_item_comparison_hooks.all? { |hook|
|
370
|
+
Spree::Config.line_item_comparison_hooks.all? { |hook|
|
360
371
|
send(hook, line_item, options)
|
361
372
|
}
|
362
373
|
end
|
@@ -78,7 +78,7 @@ module Spree
|
|
78
78
|
def find_matching_line_item(other_order_line_item)
|
79
79
|
order.line_items.detect do |my_li|
|
80
80
|
my_li.variant == other_order_line_item.variant &&
|
81
|
-
|
81
|
+
Spree::Config.line_item_comparison_hooks.all? do |hook|
|
82
82
|
order.send(hook, my_li, other_order_line_item.serializable_hash)
|
83
83
|
end
|
84
84
|
end
|
@@ -113,7 +113,7 @@ module Spree
|
|
113
113
|
# It also fits the criteria for sales tax as outlined here:
|
114
114
|
# http://www.boe.ca.gov/formspubs/pub113/
|
115
115
|
update_promotions
|
116
|
-
|
116
|
+
update_tax_adjustments
|
117
117
|
update_item_totals
|
118
118
|
end
|
119
119
|
|
@@ -198,21 +198,8 @@ module Spree
|
|
198
198
|
Spree::Config.promotions.order_adjuster_class.new(order).call
|
199
199
|
end
|
200
200
|
|
201
|
-
def
|
201
|
+
def update_tax_adjustments
|
202
202
|
Spree::Config.tax_adjuster_class.new(order).adjust!
|
203
|
-
|
204
|
-
[*line_items, *shipments].each do |item|
|
205
|
-
tax_adjustments = item.adjustments.select(&:tax?)
|
206
|
-
# Tax adjustments come in not one but *two* exciting flavours:
|
207
|
-
# Included & additional
|
208
|
-
|
209
|
-
# Included tax adjustments are those which are included in the price.
|
210
|
-
# These ones should not affect the eventual total price.
|
211
|
-
#
|
212
|
-
# Additional tax adjustments are the opposite, affecting the final total.
|
213
|
-
item.included_tax_total = tax_adjustments.select(&:included?).sum(&:amount)
|
214
|
-
item.additional_tax_total = tax_adjustments.reject(&:included?).sum(&:amount)
|
215
|
-
end
|
216
203
|
end
|
217
204
|
|
218
205
|
def update_cancellations
|
@@ -221,21 +208,17 @@ module Spree
|
|
221
208
|
|
222
209
|
def update_item_totals
|
223
210
|
[*line_items, *shipments].each do |item|
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
item.
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
adjustment_total: item.adjustment_total,
|
236
|
-
updated_at: Time.current,
|
237
|
-
)
|
238
|
-
end
|
211
|
+
Spree::Config.item_total_class.new(item).recalculate!
|
212
|
+
|
213
|
+
next unless item.changed?
|
214
|
+
|
215
|
+
item.update_columns(
|
216
|
+
promo_total: item.promo_total,
|
217
|
+
included_tax_total: item.included_tax_total,
|
218
|
+
additional_tax_total: item.additional_tax_total,
|
219
|
+
adjustment_total: item.adjustment_total,
|
220
|
+
updated_at: Time.current,
|
221
|
+
)
|
239
222
|
end
|
240
223
|
end
|
241
224
|
end
|
data/app/models/spree/payment.rb
CHANGED
@@ -7,6 +7,7 @@ module Spree
|
|
7
7
|
#
|
8
8
|
class Payment < Spree::Base
|
9
9
|
include Spree::Payment::Processing
|
10
|
+
include Metadata
|
10
11
|
|
11
12
|
IDENTIFIER_CHARS = (('A'..'Z').to_a + ('0'..'9').to_a - %w(0 1 I O)).freeze
|
12
13
|
NON_RISKY_AVS_CODES = ['B', 'D', 'H', 'J', 'M', 'Q', 'T', 'V', 'X', 'Y'].freeze
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# This is the base class used for crafting permission sets.
|
6
|
+
#
|
7
|
+
# This is used by {Spree::RoleConfiguration} when adding custom behavior to {Spree::Ability}.
|
8
|
+
# See one of the subclasses for example structure such as {Spree::PermissionSets::UserDisplay}
|
9
|
+
#
|
10
|
+
# @see Spree::RoleConfiguration
|
11
|
+
# @see Spree::PermissionSets
|
12
|
+
class Base
|
13
|
+
# @param ability [CanCan::Ability]
|
14
|
+
# The ability that will be extended with the current permission set.
|
15
|
+
# The ability passed in must respond to #user
|
16
|
+
def initialize(ability)
|
17
|
+
@ability = ability
|
18
|
+
end
|
19
|
+
|
20
|
+
# Activate permissions on the ability. Put your can and cannot statements here.
|
21
|
+
# Must be overridden by subclasses
|
22
|
+
def activate!
|
23
|
+
raise NotImplementedError.new
|
24
|
+
end
|
25
|
+
|
26
|
+
# Provide the permission set privilege in the form of a :symbol.
|
27
|
+
# Must be overridden by subclasses.
|
28
|
+
def self.privilege
|
29
|
+
raise NotImplementedError, "Subclass #{name} must define a privilege using `self.privilege :symbol`"
|
30
|
+
end
|
31
|
+
|
32
|
+
# Provide the permission set category in the form of a :symbol.
|
33
|
+
# Must be overridden by subclasses.
|
34
|
+
def self.category
|
35
|
+
raise NotImplementedError, "Subclass #{name} must define a category using `self.category :symbol`"
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
attr_reader :ability
|
41
|
+
|
42
|
+
delegate :can, :cannot, :user, to: :ability
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Read-only permissions for e-commerce settings.
|
6
|
+
#
|
7
|
+
# Roles with this permission will be able to view information, also from the admin
|
8
|
+
# panel, about:
|
9
|
+
#
|
10
|
+
# - Tax categories
|
11
|
+
# - Tax rates
|
12
|
+
# - Zones
|
13
|
+
# - Countries
|
14
|
+
# - States
|
15
|
+
# - Payment methods
|
16
|
+
# - Taxonomies
|
17
|
+
# - Shipping methods
|
18
|
+
# - Shipping categories
|
19
|
+
# - Stock locations
|
20
|
+
# - Stock movements
|
21
|
+
# - Refund reasons
|
22
|
+
# - Reimbursement types
|
23
|
+
# - Return reasons
|
24
|
+
class ConfigurationDisplay < PermissionSets::Base
|
25
|
+
class << self
|
26
|
+
def privilege
|
27
|
+
:display
|
28
|
+
end
|
29
|
+
|
30
|
+
def category
|
31
|
+
:configuration
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def activate!
|
36
|
+
can [:read, :admin], Spree::TaxCategory
|
37
|
+
can [:read, :admin], Spree::TaxRate
|
38
|
+
can [:read, :admin], Spree::Zone
|
39
|
+
can [:read, :admin], Spree::Country
|
40
|
+
can [:read, :admin], Spree::State
|
41
|
+
can [:read, :admin], Spree::PaymentMethod
|
42
|
+
can [:read, :admin], Spree::Taxonomy
|
43
|
+
can [:read, :admin], Spree::ShippingMethod
|
44
|
+
can [:read, :admin], Spree::ShippingCategory
|
45
|
+
can [:read, :admin], Spree::StockLocation
|
46
|
+
can [:read, :admin], Spree::StockMovement
|
47
|
+
can [:read, :admin], Spree::RefundReason
|
48
|
+
can [:read, :admin], Spree::ReimbursementType
|
49
|
+
can [:read, :admin], Spree::ReturnReason
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Read and write permissions for e-commerce settings.
|
6
|
+
#
|
7
|
+
# Roles with this permission set will have full control over:
|
8
|
+
#
|
9
|
+
# - Tax categories
|
10
|
+
# - Tax rates
|
11
|
+
# - Zones
|
12
|
+
# - Countries
|
13
|
+
# - States
|
14
|
+
# - Payment methods
|
15
|
+
# - Taxonomies
|
16
|
+
# - Shipping methods
|
17
|
+
# - Shipping categories
|
18
|
+
# - Stock locations
|
19
|
+
# - Stock movements
|
20
|
+
# - Refund reasons
|
21
|
+
# - Reimbursement types
|
22
|
+
# - Return reasons
|
23
|
+
class ConfigurationManagement < PermissionSets::Base
|
24
|
+
class << self
|
25
|
+
def privilege
|
26
|
+
:management
|
27
|
+
end
|
28
|
+
|
29
|
+
def category
|
30
|
+
:configuration
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def activate!
|
35
|
+
can :manage, Spree::TaxCategory
|
36
|
+
can :manage, Spree::TaxRate
|
37
|
+
can :manage, Spree::Zone
|
38
|
+
can :manage, Spree::Country
|
39
|
+
can :manage, Spree::State
|
40
|
+
can :manage, Spree::PaymentMethod
|
41
|
+
can :manage, Spree::Taxonomy
|
42
|
+
can :manage, Spree::ShippingMethod
|
43
|
+
can :manage, Spree::ShippingCategory
|
44
|
+
can :manage, Spree::StockLocation
|
45
|
+
can :manage, Spree::StockMovement
|
46
|
+
can :manage, Spree::RefundReason
|
47
|
+
can :manage, Spree::ReimbursementType
|
48
|
+
can :manage, Spree::ReturnReason
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Permissions for viewing the admin dashboard.
|
6
|
+
#
|
7
|
+
# Roles with this permission set will be able to view the admin dashboard,
|
8
|
+
# which may or not contain sensitive information depending on
|
9
|
+
# customizations.
|
10
|
+
class DashboardDisplay < PermissionSets::Base
|
11
|
+
class << self
|
12
|
+
def privilege
|
13
|
+
:other
|
14
|
+
end
|
15
|
+
|
16
|
+
def category
|
17
|
+
:dashboard_display
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def activate!
|
22
|
+
Spree.deprecator.warn "The #{self.class.name} module is deprecated. " \
|
23
|
+
"If you still use dashboards, please copy all controllers and views from #{self.class.name} to your application."
|
24
|
+
can [:admin, :home], :dashboards
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Permissions for e-commerce customers.
|
6
|
+
#
|
7
|
+
# This permission set is always added to the `:default` role, which in turn
|
8
|
+
# is the default role for all users without any explicit roles.
|
9
|
+
#
|
10
|
+
# Permissions include reading and updating orders when the ability's user
|
11
|
+
# has been assigned as the order's user, unless the order is already
|
12
|
+
# completed. Same is true for guest checkout orders.
|
13
|
+
#
|
14
|
+
# It grants read-only permissions for the following resources typically used
|
15
|
+
# during a checkout process:
|
16
|
+
#
|
17
|
+
# - Zones
|
18
|
+
# - Countries
|
19
|
+
# - States
|
20
|
+
# - Taxons
|
21
|
+
# - Taxonomies
|
22
|
+
# - Products
|
23
|
+
# - Properties
|
24
|
+
# - Product properties
|
25
|
+
# - Variants
|
26
|
+
# - Option types
|
27
|
+
# - Option values
|
28
|
+
# - Stock items
|
29
|
+
# - Stock locations
|
30
|
+
#
|
31
|
+
# Abilities with this role can also create refund authorizations for orders
|
32
|
+
# with the same user, as well as reading and updating the user record and
|
33
|
+
# their associated cards.
|
34
|
+
class DefaultCustomer < PermissionSets::Base
|
35
|
+
class << self
|
36
|
+
def privilege
|
37
|
+
:other
|
38
|
+
end
|
39
|
+
|
40
|
+
def category
|
41
|
+
:default_customer
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def activate!
|
46
|
+
can :read, Country
|
47
|
+
can :read, OptionType
|
48
|
+
can :read, OptionValue
|
49
|
+
can :create, Order do |order, token|
|
50
|
+
# same user, or both nil
|
51
|
+
order.user == user ||
|
52
|
+
# guest checkout order
|
53
|
+
order.email.present? ||
|
54
|
+
# via API, just like with show and update
|
55
|
+
(order.guest_token.present? && token == order.guest_token)
|
56
|
+
end
|
57
|
+
can [:show, :update], Order, Order.where(user:) do |order, token|
|
58
|
+
order.user == user || (order.guest_token.present? && token == order.guest_token)
|
59
|
+
end
|
60
|
+
cannot :update, Order do |order|
|
61
|
+
order.completed?
|
62
|
+
end
|
63
|
+
can :create, ReturnAuthorization do |return_authorization|
|
64
|
+
return_authorization.order.user == user
|
65
|
+
end
|
66
|
+
can [:read, :update], CreditCard, user_id: user.id
|
67
|
+
can :read, Product
|
68
|
+
can :read, ProductProperty
|
69
|
+
can :read, Property
|
70
|
+
can :create, Spree.user_class
|
71
|
+
can [:show, :update, :update_email], Spree.user_class, id: user.id
|
72
|
+
can :read, State
|
73
|
+
can :read, StockItem, stock_location: { active: true }
|
74
|
+
can :read, StockLocation, active: true
|
75
|
+
can :read, Taxon
|
76
|
+
can :read, Taxonomy
|
77
|
+
can [:save_in_address_book, :remove_from_address_book], Spree.user_class, id: user.id
|
78
|
+
can [:read, :view_out_of_stock], Variant
|
79
|
+
can :read, Zone
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Read permissions for orders.
|
6
|
+
#
|
7
|
+
# This permission set allows users to view all related information about
|
8
|
+
# orders, also from the admin panel, including:
|
9
|
+
#
|
10
|
+
# - Orders
|
11
|
+
# - Payments
|
12
|
+
# - Shipments
|
13
|
+
# - Adjustments
|
14
|
+
# - Line items
|
15
|
+
# - Return authorizations
|
16
|
+
# - Customer returns
|
17
|
+
# - Order cancellations
|
18
|
+
# - Reimbursements
|
19
|
+
# - Return items
|
20
|
+
# - Refunds
|
21
|
+
#
|
22
|
+
# However, it does not allow any modifications to be made to any of these
|
23
|
+
# resources.
|
24
|
+
class OrderDisplay < PermissionSets::Base
|
25
|
+
class << self
|
26
|
+
def privilege
|
27
|
+
:display
|
28
|
+
end
|
29
|
+
|
30
|
+
def category
|
31
|
+
:order
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def activate!
|
36
|
+
can [:read, :admin, :edit, :cart], Spree::Order
|
37
|
+
can [:read, :admin], Spree::Payment
|
38
|
+
can [:read, :admin], Spree::Shipment
|
39
|
+
can [:read, :admin], Spree::Adjustment
|
40
|
+
can [:read, :admin], Spree::LineItem
|
41
|
+
can [:read, :admin], Spree::ReturnAuthorization
|
42
|
+
can [:read, :admin], Spree::CustomerReturn
|
43
|
+
can [:read, :admin], Spree::OrderCancellations
|
44
|
+
can [:read, :admin], Spree::Reimbursement
|
45
|
+
can [:read, :admin], Spree::ReturnItem
|
46
|
+
can [:read, :admin], Spree::Refund
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Full permissions for order management.
|
6
|
+
#
|
7
|
+
# This permission set grants full control over all order and related resources,
|
8
|
+
# including:
|
9
|
+
#
|
10
|
+
# - Orders
|
11
|
+
# - Payments
|
12
|
+
# - Shipments
|
13
|
+
# - Adjustments
|
14
|
+
# - Line items
|
15
|
+
# - Return authorizations
|
16
|
+
# - Customer returns
|
17
|
+
# - Order cancellations
|
18
|
+
# - Reimbursements
|
19
|
+
# - Return items
|
20
|
+
# - Refunds
|
21
|
+
#
|
22
|
+
# It also allows reading reimbursement types, but not modifying them.
|
23
|
+
class OrderManagement < PermissionSets::Base
|
24
|
+
class << self
|
25
|
+
def privilege
|
26
|
+
:management
|
27
|
+
end
|
28
|
+
|
29
|
+
def category
|
30
|
+
:order
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def activate!
|
35
|
+
can :read, Spree::ReimbursementType
|
36
|
+
can :manage, Spree::Order
|
37
|
+
can :manage, Spree::Payment
|
38
|
+
can :manage, Spree::Shipment
|
39
|
+
can :manage, Spree::Adjustment
|
40
|
+
can :manage, Spree::LineItem
|
41
|
+
can :manage, Spree::ReturnAuthorization
|
42
|
+
can :manage, Spree::CustomerReturn
|
43
|
+
can :manage, Spree::OrderCancellations
|
44
|
+
can :manage, Spree::Reimbursement
|
45
|
+
can :manage, Spree::ReturnItem
|
46
|
+
can :manage, Spree::Refund
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Spree
|
4
|
+
module PermissionSets
|
5
|
+
# Read-only permissions for products.
|
6
|
+
#
|
7
|
+
# This permission set allows users to view all related information about
|
8
|
+
# products, also from the admin panel, including:
|
9
|
+
#
|
10
|
+
# - Products
|
11
|
+
# - Images
|
12
|
+
# - Variants
|
13
|
+
# - Option values
|
14
|
+
# - Product properties
|
15
|
+
# - Option types
|
16
|
+
# - Properties
|
17
|
+
# - Taxonomies
|
18
|
+
# - Taxons
|
19
|
+
class ProductDisplay < PermissionSets::Base
|
20
|
+
class << self
|
21
|
+
def privilege
|
22
|
+
:display
|
23
|
+
end
|
24
|
+
|
25
|
+
def category
|
26
|
+
:product
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def activate!
|
31
|
+
can [:read, :admin, :edit], Spree::Product
|
32
|
+
can [:read, :admin], Spree::Image
|
33
|
+
can [:read, :admin], Spree::Variant
|
34
|
+
can [:read, :admin], Spree::OptionValue
|
35
|
+
can [:read, :admin], Spree::ProductProperty
|
36
|
+
can [:read, :admin], Spree::OptionType
|
37
|
+
can [:read, :admin], Spree::Property
|
38
|
+
can [:read, :admin], Spree::Taxonomy
|
39
|
+
can [:read, :admin], Spree::Taxon
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|