flexible_accessibility 0.1.6.pre → 0.1.8.pre

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -15,7 +15,7 @@ require 'jeweler'
15
15
  Jeweler::Tasks.new do |gem|
16
16
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
17
  gem.name = "flexible_accessibility"
18
- gem.version = "0.1.6.pre"
18
+ gem.version = "0.1.8.pre"
19
19
  gem.homepage = "http://github.com/mochnatiy/flexible_accessibility"
20
20
  gem.license = "MIT"
21
21
  gem.summary = %Q{Flexible access control system}
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "flexible_accessibility"
8
- s.version = "0.1.6.pre"
8
+ s.version = "0.1.8.pre"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Sergey Awanesov"]
@@ -30,7 +30,9 @@ Gem::Specification.new do |s|
30
30
  "lib/flexible_accessibility.rb",
31
31
  "lib/flexible_accessibility/controller_methods.rb",
32
32
  "lib/flexible_accessibility/exceptions.rb",
33
- "lib/flexible_accessibility/permissions.rb",
33
+ "lib/flexible_accessibility/filters.rb",
34
+ "lib/flexible_accessibility/permission.rb",
35
+ "lib/flexible_accessibility/utils.rb",
34
36
  "test/helper.rb",
35
37
  "test/test_flexible_accessibility.rb"
36
38
  ]
@@ -4,44 +4,25 @@ module FlexibleAccessibility
4
4
 
5
5
  # Macro for skip authorization
6
6
  def skip_authorization_here
7
- self.instance_variable_set :@route_permitted, true
8
- self.instance_variable_set :@checkable_routes, []
9
- self.send :before_filter, :check_if_route_permitted
7
+ self.instance_variable_set :@_route_permitted, true
8
+ self.instance_variable_set :@_checkable_routes, []
9
+ #self.send :before_filter, :check_if_route_permitted
10
10
  end
11
11
 
12
12
  # Macro for define authorization
13
13
  def authorize args={}
14
- self.instance_variable_set :@route_permitted, false
15
- self.send :before_filter, :check_permission_to_route
16
- self.send :before_filter, :check_if_route_permitted
14
+ self.instance_variable_set :@_route_permitted, false
15
+ #self.send :before_filter, :check_permission_to_route
16
+ #self.send :before_filter, :check_if_route_permitted
17
17
  set_actions_to_authorize args
18
18
  end
19
19
 
20
20
  private
21
- #
21
+ # Set actions for authorize as instance variable
22
22
  def set_actions_to_authorize args={}
23
- self.instance_variable_set :@checkable_routes, args[:only] unless args[:only].nil?
23
+ self.instance_variable_set :@_checkable_routes, args[:only] unless args[:only].nil?
24
24
  # TODO: understand and fix it
25
- self.instance_variable_set :@checkable_routes, self.action_methods - args[:except] unless args[:except].nil?
26
- end
27
-
28
- #
29
- def current_route
30
- path = ActionController::Routing::Routes.recognize_path request.env["PATH_INFO"]
31
- [path[:controller], path[:action]]
32
- end
33
-
34
- # We checks access to route
35
- # And we expected the existing of current_user helper
36
- def check_permission_to_route
37
- if self.instance_variable_get(:@checkable_routes).include? current_route[1].to_sym
38
- self.instance_variable_set(:@route_permitted, true) unless Permissions.is_action_permitted_for_user? "#{current_route[0]}##{current_route[1]}", current_user
39
- end
40
- end
41
-
42
- # We checks @authorized variable state
43
- def check_if_route_permitted
44
- raise FlexibleAccessibility::AccessDeniedException unless self.instance_variable_get :@route_permitted
25
+ self.instance_variable_set :@_checkable_routes, self.action_methods - args[:except] unless args[:except].nil?
45
26
  end
46
27
  end
47
28
 
@@ -53,7 +34,7 @@ module FlexibleAccessibility
53
34
 
54
35
  # We checks url for each link in view to show it
55
36
  def has_access? controller, action
56
- Permissions.is_action_permitted_for_user? "#{controller}##{action}", current_user
37
+ Permission.is_action_permitted_for_user? "#{controller}##{action}", current_user
57
38
  end
58
39
  end
59
40
  end
@@ -1,4 +1,4 @@
1
- module FlexibleAccessibilty
1
+ module FlexibleAccessibility
2
2
  class AccessDeniedException < StandardError
3
3
  attr_reader :action, :subject
4
4
  attr_writer :default_message
@@ -7,7 +7,7 @@ module FlexibleAccessibilty
7
7
  @message = message
8
8
  @action = action
9
9
  @subject = subject
10
- @default_message = I18n.t('errors.access_denied')
10
+ @default_message = I18n.t('flexible_accessibility.errors.access_denied', :action => @action)
11
11
  end
12
12
 
13
13
  def to_s
@@ -0,0 +1,42 @@
1
+ module FlexibleAccessibility
2
+ module Filters
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ append_before_filter :check_permission_to_route
7
+ append_before_filter :check_if_route_permitted
8
+ end
9
+
10
+ private
11
+ # Detect current controller and action and return a permission
12
+ def current_resource
13
+ # ActionController::Routing::Routes.recognize_path request.env["PATH_INFO"][:controller]
14
+ params[:controller]
15
+ end
16
+
17
+ def current_action
18
+ # ActionController::Routing::Routes.recognize_path request.env["PATH_INFO"][:action]
19
+ params[:action]
20
+ end
21
+
22
+ def current_route
23
+ "#{current_resource}##{current_action}"
24
+ end
25
+ # We checks access to route
26
+ # And we expected the existing of current_user helper
27
+ def check_permission_to_route
28
+ if self.class.instance_variable_get(:@_checkable_routes).include? current_action.to_sym
29
+ self.class.instance_variable_set :@_route_permitted, Permission.is_action_permitted_for_user?(current_route, current_user)
30
+ end
31
+ end
32
+
33
+ # We checks @authorized variable state
34
+ def check_if_route_permitted
35
+ raise AccessDeniedException.new(nil, current_route, nil) unless self.class.instance_variable_get :@_route_permitted
36
+ end
37
+ end
38
+
39
+ ActiveSupport.on_load(:action_controller) do
40
+ ActionController::Base.send(:include, Filters)
41
+ end
42
+ end
@@ -0,0 +1,22 @@
1
+ module FlexibleAccessibility
2
+ class Permission
3
+ class << self
4
+ def all
5
+ permissions = {}
6
+ Utils.new.get_controllers.each do |klass|
7
+ permissions[klass.to_sym] = klass.camelize.constantize.instance_variable_get(:@_checkable_routes).collect{ |a| a.to_s }.join(', ')
8
+ end
9
+ permissions
10
+ end
11
+
12
+ # Stub methods
13
+ def is_action_permitted? action
14
+ false
15
+ end
16
+
17
+ def is_action_permitted_for_user? action, user
18
+ false
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ module FlexibleAccessibility
2
+ class Utils
3
+ def initialize
4
+ @path = "#{::Rails.root}/app/controllers/"
5
+ @controllers = []
6
+ end
7
+
8
+ def get_controllers
9
+ get_controllers_recursive @path
10
+ end
11
+
12
+ def get_controllers_recursive path
13
+ (Dir.new(path).entries - ["..", "."]).each do |entry|
14
+ if File.directory? path + entry
15
+ # TODO: Add namespace handling here
16
+ # get_controllers_recursive path + entry + '/'
17
+ next
18
+ else
19
+ @controllers << File.basename(path + entry, ".*") unless File.basename(path + entry, ".*") == "application_controller"
20
+ end
21
+ end
22
+ @controllers
23
+ end
24
+ end
25
+ end
@@ -1,3 +1,5 @@
1
1
  require 'flexible_accessibility/controller_methods.rb'
2
2
  require 'flexible_accessibility/exceptions.rb'
3
- require 'flexible_accessibility/permissions.rb'
3
+ require 'flexible_accessibility/permission.rb'
4
+ require 'flexible_accessibility/filters.rb'
5
+ require 'flexible_accessibility/utils.rb'
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
- hash: 961915988
4
+ hash: 961916012
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 6
9
+ - 8
10
10
  - pre
11
- version: 0.1.6.pre
11
+ version: 0.1.8.pre
12
12
  platform: ruby
13
13
  authors:
14
14
  - Sergey Awanesov
@@ -116,7 +116,9 @@ files:
116
116
  - lib/flexible_accessibility.rb
117
117
  - lib/flexible_accessibility/controller_methods.rb
118
118
  - lib/flexible_accessibility/exceptions.rb
119
- - lib/flexible_accessibility/permissions.rb
119
+ - lib/flexible_accessibility/filters.rb
120
+ - lib/flexible_accessibility/permission.rb
121
+ - lib/flexible_accessibility/utils.rb
120
122
  - test/helper.rb
121
123
  - test/test_flexible_accessibility.rb
122
124
  homepage: http://github.com/mochnatiy/flexible_accessibility
@@ -1,20 +0,0 @@
1
- module FlexibleAccessibility
2
- class Permissions
3
- class << self
4
- def get_permissions
5
- permissions = {}
6
- ApplicationController.subclasses.each do |klass|
7
- permissions[klass.to_s.tableize.singularize.to_sym] = klass.instance_variable_get(:@checkable_routes).collect{ |a| a.to_s }.join(', ')
8
- end
9
- permissions
10
- end
11
-
12
- def is_action_permitted? action
13
- end
14
-
15
- def is_action_permitted_for_user? action, user
16
- !self.where(["action = ? and user_id = ?", action, user.id]).empty?
17
- end
18
- end
19
- end
20
- end