flexible_accessibility 0.1.2.pre → 0.1.3.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.2.pre"
18
+ gem.version = "0.1.3.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}
@@ -46,7 +46,6 @@ task :default => :test
46
46
  require 'rdoc/task'
47
47
  Rake::RDocTask.new do |rdoc|
48
48
  version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
-
50
49
  rdoc.rdoc_dir = 'rdoc'
51
50
  rdoc.title = "flexible_accessibility #{version}"
52
51
  rdoc.rdoc_files.include('README*')
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "flexible_accessibility"
8
- s.version = "0.1.2.pre"
8
+ s.version = "0.1.3.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"]
12
- s.date = "2012-07-01"
12
+ s.date = "2012-07-16"
13
13
  s.description = "Flexible access control system for your rails application. Based on analysis of controller actions"
14
14
  s.email = "sergey.awanesov@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -30,9 +30,7 @@ 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/generators/flexible_accessibility/permission/permission_generator.rb",
34
- "lib/generators/flexible_accessibility/permission/templates/create_permissions.rb",
35
- "lib/generators/flexible_accessibility/permission/templates/permission.rb",
33
+ "lib/flexible_accessibility/permissions.rb",
36
34
  "test/helper.rb",
37
35
  "test/test_flexible_accessibility.rb"
38
36
  ]
@@ -2,45 +2,56 @@ module FlexibleAccessibility
2
2
  module ControllerMethods
3
3
  module ClassMethods
4
4
 
5
- #
6
- def skip_authorization_on_resource
7
- @authorized = true
5
+ # Macro for skip authorization
6
+ def skip_authorization_here
7
+ self.instance_variable_set :@route_permitted, true
8
+ self.send :before_filter, :check_if_route_permitted
8
9
  end
9
10
 
10
- #
11
- def authorize *args
12
- self.send :before_filter, :check_access_to_resource, *args
11
+ # Macro for define authorization
12
+ def authorize args={}
13
+ self.send :before_filter, :check_permission_to_route
14
+ self.send :before_filter, :check_if_route_permitted
15
+ set_actions_to_authorize *args
13
16
  end
17
+
18
+ private
19
+ #
20
+ def set_actions_to_authorize args={}
21
+ self.instance_variable_set :@checkable_routes, args[:only] unless args[:only].nil?
22
+ self.instance_variable_set :@checkable_routes, self.action_methods - args[:except] unless args[:except].nil?
23
+ end
14
24
 
15
25
  #
16
- def current_action
26
+ def current_route
17
27
  path = ActionController::Routing::Routes.recognize_path request.env["PATH_INFO"]
18
- @fa_path = [path[:controller], path[:action]]
28
+ [path[:controller], path[:action]]
19
29
  end
20
30
 
21
- #
22
- def check_access_to_resource
23
- if @actions.include current_action[1].to_sym
24
- @authorized = true unless Permission.check_access "#{current_action[0]}##{current_action[1]}", current_action
31
+ # We checks access to route
32
+ # And we expected the existing of current_user helper
33
+ def check_permission_to_route
34
+ if self.instance_variable_get(:@checkable_routes).include? current_route[1].to_sym
35
+ self.instance_variable_set(:@route_permitted, true) unless Permissions.is_action_permitted_for_user? "#{current_route[0]}##{current_route[1]}", current_user
25
36
  end
26
37
  end
27
38
 
28
- #
29
- def check_if_authorized
30
- raise FlexibleAccessibility::AccessDeniedException unless @authorized
31
- end
32
-
33
- #
34
- def has_access? controller, action
35
- Permission.check_access "#{controller}##{action}", current_action
39
+ # We checks @authorized variable state
40
+ def check_if_route_permitted
41
+ raise FlexibleAccessibility::AccessDeniedException unless self.instance_variable_get :@route_permitted
36
42
  end
37
43
  end
38
44
 
39
- #
45
+ # Callback needs for include methods and define helper method
40
46
  def self.included base
41
47
  base.extend ClassMethods
42
48
  base.helper_method has_access?
43
49
  end
50
+
51
+ # We checks url for each link in view to show it
52
+ def has_access? controller, action
53
+ Permissions.is_action_permitted_for_user? "#{controller}##{action}", current_user
54
+ end
44
55
  end
45
56
  end
46
57
 
@@ -0,0 +1,20 @@
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.constantize.new.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
@@ -1,2 +1,3 @@
1
1
  require 'flexible_accessibility/controller_methods.rb'
2
- require 'flexible_accessibility/exceptions.rb'
2
+ require 'flexible_accessibility/exceptions.rb'
3
+ require 'flexible_accessibility/permissions.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: 961915972
4
+ hash: 961915968
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
9
+ - 3
10
10
  - pre
11
- version: 0.1.2.pre
11
+ version: 0.1.3.pre
12
12
  platform: ruby
13
13
  authors:
14
14
  - Sergey Awanesov
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-07-01 00:00:00 Z
19
+ date: 2012-07-16 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  type: :development
@@ -116,9 +116,7 @@ files:
116
116
  - lib/flexible_accessibility.rb
117
117
  - lib/flexible_accessibility/controller_methods.rb
118
118
  - lib/flexible_accessibility/exceptions.rb
119
- - lib/generators/flexible_accessibility/permission/permission_generator.rb
120
- - lib/generators/flexible_accessibility/permission/templates/create_permissions.rb
121
- - lib/generators/flexible_accessibility/permission/templates/permission.rb
119
+ - lib/flexible_accessibility/permissions.rb
122
120
  - test/helper.rb
123
121
  - test/test_flexible_accessibility.rb
124
122
  homepage: http://github.com/mochnatiy/flexible_accessibility
@@ -1,12 +0,0 @@
1
- module FlexibleAccessibilty
2
- module Generators
3
- class PermissionGenerator < Rails::Generators::Base
4
- source_root File.expand_path('../templates', __FILE__)
5
-
6
- def generate_ability
7
- copy_file "permission.rb", "app/models/permission.rb"
8
- copy_file "create_permissions.rb", "db/migrate/create_permissions.rb"
9
- end
10
- end
11
- end
12
- end
@@ -1,15 +0,0 @@
1
- class CreatePermissions < ActiveRecord::Migration
2
- def up
3
- create_table :permissions do |t|
4
- t.string :action, :null => false
5
- t.integer :user_id, :null => false
6
- t.timestamps
7
- end
8
-
9
- add_index :permissions, :user_id
10
- end
11
-
12
- def down
13
- drop_table :permissions
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- class Permission < ActiveRecord::Base
2
-
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.constantize.action_methods.collect{ |a| a.to_s }.join(', ')
8
- end
9
- end
10
-
11
- def check_access action, user
12
- !self.where(["action = ? and user_id = ?", action, user.id]).empty?
13
- end
14
- end
15
- end