flexible_accessibility 0.3.7 → 0.3.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
  SHA1:
3
- metadata.gz: ac50d41b922cf00aec741014a9e7c0f03db55a64
4
- data.tar.gz: 52422cb39013ba81cb78180d8550fa7750490cf8
3
+ metadata.gz: 091ff0a106f65dc17c65d44936339a4515e49fc4
4
+ data.tar.gz: d1382522645bff705556af8f6eb2e50457c67419
5
5
  SHA512:
6
- metadata.gz: 7709cb56418905082c53873f47cb587c624f9a2568d85337a4240c93e3041136f5364028b58b7eca9375d534f0df2378a9fda689d2d5c057dc8c6c5d8b51fde9
7
- data.tar.gz: 68fbf3dd786d7a8f182b83414363e7671e705c3632c5b7609110f6c25be7478fd589e07a640bd54ab5128dea6e1fb3c5533d95cb1203bcf4fbdc6b2342b6b9f6
6
+ metadata.gz: 4df52bdf2540ca2dab17fe892d482c2c9046cf523a7228bba1f79de76557c2fae58cf261ffe3f50419fd64bcf804840500b3af7ef456ffeab2e18472c2a1b77f
7
+ data.tar.gz: 922db8d98a6ea243bf2cd7e9e91dfff6965f005214c99e593b4dafe23eb19692fbd91dde78786bf81cfd2d0be03605e36728c78140f28266c2eaa36899c0c41c
@@ -2,9 +2,9 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'flexible_accessibility'
5
- s.version = '0.3.7'
5
+ s.version = '0.3.16'
6
6
  s.authors = ['Sergey Avanesov']
7
- s.date = '2014-05-27'
7
+ s.date = '2014-07-08'
8
8
  s.summary = 'Flexible access control system'
9
9
  s.description = 'Flexible access control system for your rails application. Based on analysis of controller actions'
10
10
  s.email = 'sergey.awanesov@gmail.com'
@@ -4,6 +4,6 @@ require 'flexible_accessibility/exceptions.rb'
4
4
  require 'flexible_accessibility/permission.rb'
5
5
  require 'flexible_accessibility/filters.rb'
6
6
  require 'flexible_accessibility/resource.rb'
7
- require 'flexible_accessibility/utils.rb'
7
+ require 'flexible_accessibility/route_provider.rb'
8
8
  require 'flexible_accessibility/access_provider.rb'
9
9
  require 'flexible_accessibility/access_rule.rb'
@@ -7,26 +7,18 @@ module FlexibleAccessibility
7
7
  authorize :skip => :all
8
8
  end
9
9
 
10
- # Macro for define actions with authorization
10
+ # Macro for define routes table with authorization
11
11
  def authorize(args={})
12
12
  arguments = parse_arguments(args)
13
- validate_arguments(arguments)
14
- available_routes = Utils.new.app_routes[self.to_s.gsub(/Controller/, '')]
15
- # available_routes = self.action_methods if available_routes.nil?
16
- raise NoWayToDetectAvailableRoutesException if available_routes.nil?
17
-
18
- self.instance_variable_set(:@_verifiable_routes, available_routes) if arguments[:all]
19
- self.instance_variable_set(:@_verifiable_routes, arguments[:only]) unless arguments[:only].nil?
20
- self.instance_variable_set(:@_verifiable_routes, available_routes - arguments[:except]) unless arguments[:except].nil?
21
13
 
22
- unless arguments[:skip].nil?
23
- non_verifiable_routes = arguments[:skip].first == 'all' ? available_routes : arguments[:skip]
24
- self.instance_variable_set(:@_non_verifiable_routes, non_verifiable_routes)
25
- end
14
+ validate_arguments(arguments)
15
+
16
+ self.instance_variable_set(:@_routes_table, arguments)
26
17
  end
27
18
 
28
19
  private
29
- # Parse arguments from macro calls
20
+
21
+ # Parse arguments from macro call
30
22
  def parse_arguments(args={})
31
23
  result = {}
32
24
  (result[:all] = ['all'].to_set) and return result if args.to_s == 'all'
@@ -40,6 +32,7 @@ module FlexibleAccessibility
40
32
  result
41
33
  end
42
34
 
35
+ # Validate arguments from macro call
43
36
  def validate_arguments(args={})
44
37
  return if args.count == 1 && args.keys.include?(:all)
45
38
  only_options = args[:only] || Set.new
@@ -54,18 +47,18 @@ module FlexibleAccessibility
54
47
  end
55
48
  end
56
49
  end
50
+
51
+ # Check the url for each link in view to show it
52
+ def has_access?(permission, user)
53
+ raise UnknownUserException if user.nil?
54
+ AccessProvider.is_action_permitted_for_user?(permission, user)
55
+ end
57
56
 
58
57
  # Callback is needed for include methods and define helper method
59
58
  def self.included(base)
60
59
  base.extend(ClassMethods)
61
60
  base.helper_method(:has_access?)
62
61
  end
63
-
64
- # Check the url for each link in view to show it
65
- def has_access?(permission, user)
66
- raise UnknownUserException if user.nil?
67
- AccessProvider.is_action_permitted_for_user?(permission, user)
68
- end
69
62
  end
70
63
  end
71
64
 
@@ -31,16 +31,14 @@ module FlexibleAccessibility
31
31
 
32
32
  # Check access to route and we expected the existing of current_user helper
33
33
  def check_permission_to_route
34
- self.class.instance_variable_set(:@_verifiable_routes, []) if self.class.instance_variable_get(:@_verifiable_routes).nil?
35
- self.class.instance_variable_set(:@_non_verifiable_routes, []) if self.class.instance_variable_get(:@_non_verifiable_routes).nil?
36
-
37
- if self.class.instance_variable_get(:@_verifiable_routes).include?(current_action)
34
+ route_provider = RouteProvider.new(self.class)
35
+ if route_provider.verifiable_routes_list.include?(current_action)
38
36
  raise UserNotLoggedInException.new(current_route, nil) if logged_user.nil?
39
- self.class.instance_variable_set(:@_route_permitted, AccessProvider.is_action_permitted_for_user?(current_route, logged_user))
40
- elsif self.class.instance_variable_get(:@_non_verifiable_routes).include? current_action
41
- self.class.instance_variable_set(:@_route_permitted, true)
37
+ AccessProvider.is_action_permitted_for_user?(current_route, logged_user) ? allow_route : deny_route
38
+ elsif route_provider.non_verifiable_routes_list.include?(current_action)
39
+ allow_route
42
40
  else
43
- self.class.instance_variable_set(:@_route_permitted, false)
41
+ deny_route
44
42
  end
45
43
  end
46
44
 
@@ -52,7 +50,7 @@ module FlexibleAccessibility
52
50
  self.class.instance_variable_set(:@_route_permitted, false)
53
51
  end
54
52
 
55
- # Check the @authorized variable state
53
+ # Check the @_route_permitted variable state
56
54
  def check_if_route_is_permitted
57
55
  raise AccessDeniedException.new(current_route, nil) unless self.class.instance_variable_get(:@_route_permitted)
58
56
  end
@@ -20,11 +20,12 @@ module FlexibleAccessibility
20
20
  class << self
21
21
  def all
22
22
  permissions = []
23
- Utils.new.app_controllers.each do |scope|
23
+ RouteProvider.new.app_controllers.each do |scope|
24
24
  namespace = scope.first.to_s
25
25
  scope.last.each do |resource|
26
26
  resource = "#{namespace}/#{resource}" unless namespace == 'default'
27
- permissions << Permission.new(:resource => resource.gsub(/_controller/, ''), :actions => ApplicationResource.new(resource).klass.instance_variable_get(:@_verifiable_routes))
27
+ permissions << Permission.new(:resource => resource.gsub(/_controller/, ''),
28
+ :actions => RouteProvider.new(ApplicationResource.new(resource).klass).verifiable_routes_list)
28
29
  end
29
30
  end
30
31
  permissions
@@ -1,10 +1,11 @@
1
1
  module FlexibleAccessibility
2
- class Utils
2
+ class RouteProvider
3
3
  @@routes ||= {}
4
4
 
5
- def initialize
5
+ def initialize(controller=nil)
6
6
  @path = "#{::Rails.root}/app/controllers/"
7
7
  @controllers = {}
8
+ @current_controller = controller
8
9
  end
9
10
 
10
11
  def app_controllers
@@ -13,10 +14,42 @@ module FlexibleAccessibility
13
14
 
14
15
  def app_routes
15
16
  app_routes_as_hash if @@routes.empty?
16
- @@routes.to_set
17
+ @@routes
18
+ end
19
+
20
+ def verifiable_routes_list
21
+ routes_table, list = @current_controller.instance_variable_get(:@_routes_table), []
22
+
23
+ unless routes_table.nil?
24
+ list = available_routes_list if routes_table[:all]
25
+ list = routes_table[:only] unless routes_table[:only].nil?
26
+ list = available_routes_list - routes_table[:except] unless routes_table[:except].nil?
27
+ end
28
+
29
+ list
30
+ end
31
+
32
+ def non_verifiable_routes_list
33
+ routes_table, list = @current_controller.instance_variable_get(:@_routes_table), []
34
+
35
+ unless routes_table.nil?
36
+ unless routes_table[:skip].nil?
37
+ list = routes_table[:skip].first == 'all' ? available_routes_list : routes_table[:skip]
38
+ end
39
+ end
40
+
41
+ list
17
42
  end
18
43
 
19
44
  private
45
+
46
+ def available_routes_list
47
+ available_routes = self.app_routes[@current_controller.to_s.gsub(/Controller/, '')]
48
+ # available_routes = self.action_methods if available_routes.nil?
49
+ raise NoWayToDetectAvailableRoutesException if available_routes.nil?
50
+ available_routes.to_set
51
+ end
52
+
20
53
  # All controller classes placed in :default scope
21
54
  def app_controllers_recursive(path)
22
55
  invalid_entries = ['..', '.', 'concerns']
@@ -37,7 +70,6 @@ module FlexibleAccessibility
37
70
 
38
71
  # Routes from routes.rb
39
72
  def app_routes_as_hash
40
- Rails.application.reload_routes!
41
73
  Rails.application.routes.routes.each do |route|
42
74
  controller = route.defaults[:controller]
43
75
  unless controller.nil?
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flexible_accessibility
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.7
4
+ version: 0.3.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Avanesov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-27 00:00:00.000000000 Z
11
+ date: 2014-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -90,7 +90,7 @@ files:
90
90
  - lib/flexible_accessibility/filters.rb
91
91
  - lib/flexible_accessibility/permission.rb
92
92
  - lib/flexible_accessibility/resource.rb
93
- - lib/flexible_accessibility/utils.rb
93
+ - lib/flexible_accessibility/route_provider.rb
94
94
  - lib/generators/flexible_accessibility/install/install_generator.rb
95
95
  - lib/generators/flexible_accessibility/install/templates/create_access_rules.rb
96
96
  - test/helper.rb