infopark_fiona7 0.71.0.3 → 0.71.0.4

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
  SHA1:
3
- metadata.gz: 4619dc5e8bf5eb3dd97371dff2649fc8f5ec0132
4
- data.tar.gz: 5e991611b12dfd0495a3f61b710c49da1f21e9b9
3
+ metadata.gz: 2943d8f71016c77e2923a62ebdc4c196046c7a12
4
+ data.tar.gz: 8cab80405cc8c406104dc1cf6f468ce63f8a3723
5
5
  SHA512:
6
- metadata.gz: c9a406c89e791f21722a8401317692b8a786d41d76cdc1790dc615842405349d60f21c455b18e8c2d0e34f4dd1cd6c91cd8ae3482c9757fc8d3b55fbdaaaed45
7
- data.tar.gz: a3c4c6a56e68cb1b0c12fb0c98b74f8a498371c679c5e1a8897cc4160b105afe49321bf29c7bc83298bc4236714806df85314ba88374cb2532158a9157d33b0e
6
+ metadata.gz: 29ebb08d03e8b21b8b01abaabd831a538365670613f4c19983fb23762a375109f8aefcabca4e723d1486b1af650c113c1165937d99c16e859070891176a3d433
7
+ data.tar.gz: 2286addb1ac034a38e69678963fd40ea175a03d784be6a301b7944e105e1fdfce9c1d6fc0339d30546590c6d9976136ab1f3a52dc1f202fcc10bdfac7dde6ff8
@@ -1,9 +1,20 @@
1
1
  module Fiona7
2
2
  class BlobsController < ActionController::Base
3
-
4
3
  include Fiona7::BinaryHandling::DeliveryMixin
4
+ include RailsConnector::CmsAccessible
5
+
6
+ before_filter :load_obj
7
+ before_filter :ensure_object_is_active
8
+ before_filter :ensure_object_is_permitted
5
9
 
6
10
  protected
11
+ def load_obj
12
+ @obj = Fiona7::WriteObj.find(binary_id_from_params)
13
+ end
14
+
15
+ def render_obj_error(code, msg)
16
+ head code
17
+ end
7
18
 
8
19
  def binary_id_from_params
9
20
  params[:id]
@@ -4,7 +4,6 @@ module Fiona7
4
4
  before_filter :assert_legacy_mode
5
5
 
6
6
  def index
7
- return deliver_file if @obj.binary?
8
7
  return redirect_to cms_path(@obj.fiona_obj)
9
8
  end
10
9
 
@@ -0,0 +1,50 @@
1
+ module Fiona7
2
+ class AccessPermissionCheck
3
+ def initialize(obj, env, rc_user, reactor_user)
4
+ self.obj = obj
5
+ self.env = env
6
+ self.rc_user = rc_user
7
+ self.reactor_user = reactor_user
8
+ end
9
+
10
+ def read_permitted?
11
+ if editing?
12
+ read_permission_check
13
+ else
14
+ live_permission_check
15
+ end
16
+ end
17
+
18
+ protected
19
+ attr_accessor :obj, :env, :rc_user, :reactor_user
20
+
21
+ def editing?
22
+ editing_context = self.env[Scrivito::EditingContextMiddleware::ENVKEY]
23
+ editing_context && editing_context.authenticated_editor? && selected_workspace_id(editing_context) == 'rtc'
24
+ end
25
+
26
+ # this is very quick!
27
+ def live_permission_check
28
+ self.obj.permitted_for_user?(self.rc_user)
29
+ end
30
+
31
+ # this is very slow!
32
+ def read_permission_check
33
+ if !self.reactor_user
34
+ false
35
+ else
36
+ self.reactor_user.superuser? ||
37
+ (self.obj.permissions.root & self.reactor_user.groups).any? ||
38
+ (self.obj.permissions.read & self.reactor_user.groups).any?
39
+ end
40
+ end
41
+
42
+ private
43
+ def selected_workspace_id(editing_context)
44
+ # NOTE: this does not require workspace lookup/load_obj
45
+ # and thus is potentially faster
46
+ editing_context.instance_variable_get(:@selected_workspace_id).to_s
47
+ end
48
+
49
+ end
50
+ end
@@ -36,6 +36,8 @@ require "fiona7/scrivito_patches/page_config"
36
36
  require "fiona7/scrivito_patches/type_computer"
37
37
  require "fiona7/scrivito_patches/workspace"
38
38
 
39
+ require "fiona7/fiona_connector_patches/cms_accessible"
40
+
39
41
  require "fiona7/middleware/table_switching_middleware"
40
42
  require "fiona7/middleware/server_detection_middleware"
41
43
 
@@ -7,6 +7,7 @@ module RailsConnector
7
7
  Scrivito::Obj.find(self.id)
8
8
  end
9
9
 
10
+ has_many(:arel_permissions, :class_name => "::RailsConnector::Permission", :foreign_key => "object_id")
10
11
  # never use cached permissions
11
12
  def permissions
12
13
  arel_permissions
@@ -0,0 +1,16 @@
1
+ require 'rails_connector/cms_accessible'
2
+ require 'fiona7/access_permission_check'
3
+
4
+ module RailsConnector
5
+ module CmsAccessible
6
+ # changed to check live and read permissions
7
+ def ensure_object_is_permitted
8
+ unless Fiona7::AccessPermissionCheck.new(@obj, request.env, current_user, rsession && rsession.user? && rsession.user).read_permitted?
9
+ @obj = nil
10
+ render_obj_error(403, "forbidden")
11
+ return false
12
+ end
13
+ return true
14
+ end
15
+ end
16
+ end
@@ -1,3 +1,3 @@
1
1
  module Fiona7
2
- VERSION = "0.71.0.3"
2
+ VERSION = "0.71.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infopark_fiona7
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.71.0.3
4
+ version: 0.71.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tomasz Przedmojski
@@ -166,6 +166,7 @@ files:
166
166
  - config/locales/permissions.yml
167
167
  - config/routes.rb
168
168
  - infopark_fiona7.gemspec
169
+ - lib/fiona7/access_permission_check.rb
169
170
  - lib/fiona7/assert.rb
170
171
  - lib/fiona7/builder/batch_widget_writer.rb
171
172
  - lib/fiona7/builder/obj_builder.rb
@@ -183,6 +184,7 @@ files:
183
184
  - lib/fiona7/controllers/rest_api/workspace_controller.rb
184
185
  - lib/fiona7/engine.rb
185
186
  - lib/fiona7/fiona_connector_patches/basic_obj.rb
187
+ - lib/fiona7/fiona_connector_patches/cms_accessible.rb
186
188
  - lib/fiona7/initializer.rb
187
189
  - lib/fiona7/json/obj_decorator.rb
188
190
  - lib/fiona7/json/reverse_obj_decorator.rb