alchemy_cms 7.4.15 → 7.4.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 820ced84f65c22ce14dcf2d399bb78fb7463bc311d56ebec29b9106d9b168eb8
4
- data.tar.gz: 6760e300fe2497a33e1a657cb6792dcd535343ddedb6897831f18569a6ea2b49
3
+ metadata.gz: d0a06fcd96871af12f69f0fc6ce8fca812e488cb8f237422b0d96d698b93e5d0
4
+ data.tar.gz: 9efa2b94685991f66d48f4a252b7386003e351a3f13c6ff4edfe4e020eb54ffc
5
5
  SHA512:
6
- metadata.gz: 2862492de3c1bc9c3e4bf30a7a6127af4dcd8eb11f02914806469f0c22de6936b8b2ba5cda736737f98de0ec7c950e0d3042dec785befe69018130bd118e6767
7
- data.tar.gz: 73f531a006df56e276c378765346e537f216f7a4ed7ca641e3520ac12f5bf56cdc980a27c1872ce581c6dd50d3bc323a2bdb76baeca0742ce1c5456afabb7805
6
+ metadata.gz: 249f19b6adb1ac0e372969eeea89c475410490da05bb29d01450efd38b4c58d8ab4d819956391956ce8bc8fcc660b872cdf4793ffe17a5b0dee386d18cbb910a
7
+ data.tar.gz: 9ac152930b4533aa7598c069864f77f56d72178a56f114496d6fee66220639b84dc8aaf648d70e8b86bac79ab3ae201b5b9154094ef2a9dfc5dee8c4d7de7dd9
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 7.4.16 (2026-07-28)
4
+
5
+ ## What's Changed
6
+ * [7.4] authorize nodes#index to prevent navigation tree disclosure by @tvdeyen in https://github.com/AlchemyCMS/alchemy_cms/pull/4099
7
+
8
+
9
+ **Full Changelog**: https://github.com/AlchemyCMS/alchemy_cms/compare/v7.4.15...v7.4.16
10
+
3
11
  ## 7.4.15 (2026-06-18)
4
12
 
5
13
  ## What's Changed
@@ -6,7 +6,7 @@ module Alchemy
6
6
  before_action :authorize_access, only: [:move, :toggle_folded]
7
7
 
8
8
  def index
9
- @nodes = Node.all
9
+ @nodes = Node.accessible_by(current_ability, :index)
10
10
  @nodes = @nodes.includes(:parent)
11
11
  @nodes = @nodes.where(language_id: params[:language_id]) if params[:language_id]
12
12
  @nodes = @nodes.ransack(params[:filter]).result.order(:lft)
@@ -19,6 +19,27 @@ module Alchemy
19
19
  foreign_key: :related_object_id,
20
20
  inverse_of: :related_object
21
21
 
22
+ # All nodes of the current site whose language is published.
23
+ scope :from_current_public_site, -> {
24
+ joins(:language)
25
+ .where(Alchemy::Language.table_name => {site_id: Alchemy::Current.site})
26
+ .merge(Alchemy::Language.published)
27
+ }
28
+
29
+ # Nodes an anonymous visitor may see: external links or nodes attached to a
30
+ # published, unrestricted page, scoped to the current site.
31
+ scope :available_to_guests, -> {
32
+ from_current_public_site.where(page: nil)
33
+ .or(from_current_public_site.where(page: Alchemy::Page.published.not_restricted))
34
+ }
35
+
36
+ # Like #available_to_guests but including nodes attached to restricted pages,
37
+ # which logged in members are allowed to see.
38
+ scope :available_to_members, -> {
39
+ from_current_public_site.where(page: nil)
40
+ .or(from_current_public_site.where(page: Alchemy::Page.published))
41
+ }
42
+
22
43
  before_validation :translate_root_menu_name, if: -> { root? }
23
44
  before_validation :set_menu_type_from_root, unless: -> { root? }
24
45
 
@@ -44,6 +44,11 @@ module Alchemy
44
44
  can :read, Alchemy::Page, Alchemy::Page.published.not_restricted.from_current_site do |p|
45
45
  p.public? && !p.restricted? && p.site == Alchemy::Current.site
46
46
  end
47
+
48
+ can :read, Alchemy::Node, Alchemy::Node.available_to_guests do |node|
49
+ node.language.public? && node.language.site_id == Alchemy::Current.site&.id &&
50
+ (node.page.nil? || (node.page.public? && !node.page.restricted?))
51
+ end
47
52
  end
48
53
  end
49
54
 
@@ -67,6 +72,11 @@ module Alchemy
67
72
  can :read, Alchemy::Page, Alchemy::Page.published.from_current_site do |p|
68
73
  p.public? && p.site == Alchemy::Current.site
69
74
  end
75
+
76
+ can :read, Alchemy::Node, Alchemy::Node.available_to_members do |node|
77
+ node.language.public? && node.language.site_id == Alchemy::Current.site&.id &&
78
+ (node.page.nil? || node.page.public?)
79
+ end
70
80
  end
71
81
  end
72
82
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Alchemy
4
- VERSION = "7.4.15"
4
+ VERSION = "7.4.16"
5
5
 
6
6
  def self.version
7
7
  VERSION
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alchemy_cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.4.15
4
+ version: 7.4.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thomas von Deyen
@@ -1409,7 +1409,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1409
1409
  version: '0'
1410
1410
  requirements:
1411
1411
  - ImageMagick (libmagick), v6.6 or greater.
1412
- rubygems_version: 4.0.10
1412
+ rubygems_version: 4.0.16
1413
1413
  specification_version: 4
1414
1414
  summary: A powerful, userfriendly and flexible CMS for Rails
1415
1415
  test_files: []