extreme_aas 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,8 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- extreme_aas (0.0.1)
5
- capybara (>= 0.4.0)
4
+ extreme_aas (0.0.2)
6
5
  rails (~> 3.2.2)
7
6
 
8
7
  GEM
@@ -46,6 +45,14 @@ GEM
46
45
  xpath (~> 0.1.4)
47
46
  childprocess (0.3.1)
48
47
  ffi (~> 1.0.6)
48
+ columnize (0.3.6)
49
+ debugger (1.1.1)
50
+ columnize (>= 0.3.1)
51
+ debugger-linecache (~> 1.1)
52
+ debugger-ruby_core_source (~> 1.1)
53
+ debugger-linecache (1.1.1)
54
+ debugger-ruby_core_source (>= 1.1.1)
55
+ debugger-ruby_core_source (1.1.1)
49
56
  diff-lcs (1.1.3)
50
57
  erubis (2.7.0)
51
58
  factory_girl (3.0.0)
@@ -128,6 +135,8 @@ PLATFORMS
128
135
  ruby
129
136
 
130
137
  DEPENDENCIES
138
+ capybara (>= 0.4.0)
139
+ debugger
131
140
  extreme_aas!
132
141
  factory_girl_rails
133
142
  mysql2
@@ -1,3 +1,63 @@
1
1
  = ExtremeAas
2
2
 
3
- This project rocks and uses MIT-LICENSE.
3
+ Gem for implementing Authentication Authorization System.
4
+
5
+ This gem allows you to specify permissions at controller action or helper methods levels.
6
+
7
+ Please read the following description carefully.
8
+
9
+ == Action
10
+ An action is something that user can do in the system. An action can be a simple action (SimpleAction) or a group of actions (ActionGroup).
11
+
12
+ This concept was implemented using the composite design pattern.
13
+
14
+ == SimpleAction
15
+ SimpleAction is the simplest thing an user has acccess to. It can be a helper method, or a controller action.
16
+
17
+ Simple actions are generated by reading the code of the application. For that you have to run the rake task extreme_aas:sync_simple_actions.
18
+
19
+ == ActionGroup
20
+ ActionGroup is a set of simple actions or other groups of actions. It is defined in the file ”./config/extreme_aas_groups.yml”.
21
+
22
+ Structure:
23
+ <group_name>:
24
+ - action_name: <action_name>
25
+ controller_name: <controller_name>
26
+ <another_group_name>:
27
+ - method_name: <method_name>
28
+ helper_name: <helper_name>
29
+ - group: <child_group_name>
30
+
31
+ Example:
32
+
33
+ group_child:
34
+ - action_name: index
35
+ controller_name: UsersController
36
+ group_parent:
37
+ - group: group_child
38
+ - method_name: show
39
+ helper_name: UsersHelper
40
+ In order to read this file and export it to the database, you have call the rake task extreme_aas:export_group_actions.
41
+
42
+ Note: You can also use the task extreme_aas:update_actions which will both update simple actions and action groups.
43
+
44
+ == Profile
45
+ A profile is the entity that is related to your application's User model, and through grants stores all the permissions that user has in the application.
46
+
47
+ == Grant
48
+ A Grant is the entity that says if a profile has access to a certain action. They can be specified or generated.
49
+
50
+ They are generated when a profile doesn't have a grant for a certain simple action, but this simple action is part of a group that is granted to the profile. Confused? Read it again, sorry :/
51
+
52
+ In this case volatile grants will be generated for the simple actions. These volatile grants have to be updated manually by calling the rake task , Profile#update_grants or GroupAction#update_grants. NOT_IMPLEMENTED
53
+
54
+ TODO kinds of grants (readonly hidden visible….)
55
+
56
+ == How to Install it
57
+
58
+ To install you have to:
59
+ $ rails generate extreme_aas
60
+ $ rake db:migrate
61
+
62
+ This will create the tables extreme_profiles, extreme_actions, extreme_simple_actions, extreme_action_groups, extreme_action_edges, extreme_grants.
63
+ Now, only granted actions will be permited in your application.
@@ -13,9 +13,9 @@ module ExtremeAas
13
13
  end
14
14
 
15
15
  def extreme_aas_profile
16
- @extreme_aas_profile ||= ExtremeProfile.last #FIXME
17
-
18
- #@extreme_aas_profile ||= ExtremeProfile.find(session[:extreme_aas_profile_id]) if session[:extreme_aas_profile_id]
16
+ @extreme_aas_profile ||= ExtremeProfile.find(session[:extreme_aas_profile_id]) if session[:extreme_aas_profile_id]
17
+ @extreme_aas_profile ||= ExtremeProfile.find 1
18
+ raise "ExtremeAas Error: There should be a default profile with id 1!" if @extreme_aas_profile.nil?
19
19
  end
20
20
  end
21
21
  end
@@ -10,8 +10,15 @@ module ExtremeAas
10
10
  def self.export path = "#{Rails.root}/config/extreme_aas_groups.yml"
11
11
  yaml = YAML::load_file(path)
12
12
  if yaml
13
+ processed_groups_ids = []
13
14
  yaml.each do |group_name, actions|
14
- group = ExtremeActionGroup.find_or_create_by_name group_name
15
+ group = ExtremeActionGroup.find_by_name group_name
16
+ if group.nil?
17
+ group = ExtremeActionGroup.create :name => group_name, :volatile => true
18
+ else
19
+ group.actions = []
20
+ end
21
+ processed_groups_ids << group.id
15
22
  actions.each do |action_yml_params|
16
23
  action_params = {}
17
24
  action_yml_params.each do |key, value|
@@ -25,9 +32,18 @@ module ExtremeAas
25
32
  end
26
33
  end
27
34
  end
35
+ ExtremeActionGroup.destroy_all(['id NOT IN (?) AND volatile = ?', processed_groups_ids, true])
28
36
  else
29
37
  puts "Warning: couldn't load file in #{path}"
30
38
  end
31
39
  end
40
+
41
+ after_initialize :default_values
42
+
43
+ def default_values
44
+ self.volatile ||= false
45
+ end
46
+
47
+
32
48
  end
33
49
  end
Binary file
@@ -14,9 +14,10 @@ Gem::Specification.new do |s|
14
14
  #Dependencies
15
15
  s.required_rubygems_version = "> 1.3.6"
16
16
  s.add_dependency "rails" , "~> 3.2.2"
17
- s.add_dependency "capybara" , ">= 0.4.0"
17
+ s.add_development_dependency "capybara" , ">= 0.4.0"
18
18
  s.add_development_dependency "rspec-rails", "~> 2.5"
19
19
  s.add_development_dependency "factory_girl_rails"
20
+ s.add_development_dependency "debugger"
20
21
  s.add_development_dependency 'mysql2'
21
22
 
22
23
  #files
@@ -26,4 +27,4 @@ Gem::Specification.new do |s|
26
27
  s.require_paths = ["lib"]
27
28
 
28
29
 
29
- end
30
+ end
@@ -1,3 +1,3 @@
1
1
  module ExtremeAas
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -18,4 +18,8 @@ class ExtremeAasGenerator < Rails::Generators::Base
18
18
  def create_migration_file
19
19
  migration_template 'migration.rb', 'db/migrate/create_extreme_aas_tables.rb'
20
20
  end
21
+
22
+ def create_extreme_aas_groups_yml_file
23
+ copy_file "extreme_aas_groups.yml", "config/extreme_aas_groups.yml"
24
+ end
21
25
  end
@@ -0,0 +1,2 @@
1
+ default:
2
+ #add here the groups and simple actions for the default group
@@ -3,12 +3,18 @@ class CreateExtremeAasTables < ActiveRecord::Migration
3
3
  create_table :extreme_profiles do |t|
4
4
  t.timestamps
5
5
  end
6
+
6
7
  create_table :extreme_grants do |t|
7
8
  t.references :extreme_profile
8
9
  t.references :extreme_action
9
10
  t.boolean :volatile
10
11
  t.timestamps
11
12
  end
13
+
14
+ create_table :extreme_actions do |t|
15
+ t.references :actionable, :polymorphic => true
16
+ t.timestamps
17
+ end
12
18
  create_table :extreme_simple_actions do |t|
13
19
  #--------
14
20
  t.string :controller_name
@@ -21,10 +27,7 @@ class CreateExtremeAasTables < ActiveRecord::Migration
21
27
  end
22
28
  create_table :extreme_action_groups do |t|
23
29
  t.string :name
24
- t.timestamps
25
- end
26
- create_table :extreme_actions do |t|
27
- t.references :actionable, :polymorphic => true
30
+ t.boolean :volatile
28
31
  t.timestamps
29
32
  end
30
33
  create_table :extreme_action_edges do |t|
@@ -32,5 +35,13 @@ class CreateExtremeAasTables < ActiveRecord::Migration
32
35
  t.integer :parent_action_id
33
36
  t.timestamps
34
37
  end
38
+
39
+ ############## DEFAULT PROFILE ##############
40
+ # default profile will have always id = 1
41
+ profile = ExtremeAas::ExtremeProfile.create :id => 1
42
+ grant = ExtremeAas::ExtremeActionGroup.create :name => 'default'
43
+ profile.give_permission grant.super_action
44
+ #############################################
45
+
35
46
  end
36
47
  end
@@ -0,0 +1,2 @@
1
+ default:
2
+ #add here the groups and simple actions for the default group
@@ -3,12 +3,18 @@ class CreateExtremeAasTables < ActiveRecord::Migration
3
3
  create_table :extreme_profiles do |t|
4
4
  t.timestamps
5
5
  end
6
+
6
7
  create_table :extreme_grants do |t|
7
8
  t.references :extreme_profile
8
9
  t.references :extreme_action
9
10
  t.boolean :volatile
10
11
  t.timestamps
11
12
  end
13
+
14
+ create_table :extreme_actions do |t|
15
+ t.references :actionable, :polymorphic => true
16
+ t.timestamps
17
+ end
12
18
  create_table :extreme_simple_actions do |t|
13
19
  #--------
14
20
  t.string :controller_name
@@ -21,10 +27,7 @@ class CreateExtremeAasTables < ActiveRecord::Migration
21
27
  end
22
28
  create_table :extreme_action_groups do |t|
23
29
  t.string :name
24
- t.timestamps
25
- end
26
- create_table :extreme_actions do |t|
27
- t.references :actionable, :polymorphic => true
30
+ t.boolean :volatile
28
31
  t.timestamps
29
32
  end
30
33
  create_table :extreme_action_edges do |t|
@@ -32,5 +35,13 @@ class CreateExtremeAasTables < ActiveRecord::Migration
32
35
  t.integer :parent_action_id
33
36
  t.timestamps
34
37
  end
38
+
39
+ ############## DEFAULT PROFILE ##############
40
+ # default profile will have always id = 1
41
+ profile = ExtremeAas::ExtremeProfile.create :id => 1
42
+ grant = ExtremeAas::ExtremeActionGroup.create :name => 'default'
43
+ profile.give_permission grant.super_action
44
+ #############################################
45
+
35
46
  end
36
47
  end
@@ -11,7 +11,7 @@
11
11
  #
12
12
  # It's strongly recommended to check this file into your version control system.
13
13
 
14
- ActiveRecord::Schema.define(:version => 20120413132357) do
14
+ ActiveRecord::Schema.define(:version => 20120419100824) do
15
15
 
16
16
  create_table "extreme_action_edges", :force => true do |t|
17
17
  t.integer "child_action_id"
@@ -22,6 +22,7 @@ ActiveRecord::Schema.define(:version => 20120413132357) do
22
22
 
23
23
  create_table "extreme_action_groups", :force => true do |t|
24
24
  t.string "name"
25
+ t.boolean "volatile"
25
26
  t.datetime "created_at", :null => false
26
27
  t.datetime "updated_at", :null => false
27
28
  end
@@ -4,9 +4,8 @@ describe "ControllerAction" do
4
4
 
5
5
  it "should grant permission" do
6
6
  action = FactoryGirl.create(:extreme_simple_action, :controller_name => 'users', :action_name => 'index').super_action
7
- grant = FactoryGirl.create(:extreme_grant_for_simple_action, :extreme_action_id => action.id)
8
- profile = grant.profile #deleteme
9
-
7
+ grant = FactoryGirl.create(:extreme_grant_for_simple_action, :extreme_action_id => action.id)
8
+ session[:extreme_aas_profile_id] = grant.profile.id
10
9
  get 'users'
11
10
  response.should be_success
12
11
  end
@@ -15,6 +14,7 @@ describe "ControllerAction" do
15
14
  action = FactoryGirl.create(:extreme_simple_action, :controller_name => 'users', :action_name => 'index').super_action
16
15
  profile = FactoryGirl.create :extreme_profile
17
16
  profile.give_permission action
17
+ session[:extreme_aas_profile_id] = profile.id
18
18
  get 'users'
19
19
  response.should be_success
20
20
  end
@@ -22,6 +22,7 @@ describe "ControllerAction" do
22
22
  it "should deny permission" do
23
23
  action = FactoryGirl.create(:extreme_simple_action, :controller_name => 'users', :action_name => 'index').super_action
24
24
  profile = FactoryGirl.create :extreme_profile
25
+ session[:extreme_aas_profile_id] = profile.id
25
26
  get 'users'
26
27
  response.response_code.should == 401
27
28
  end
@@ -6,6 +6,8 @@ require File.expand_path("../dummy/config/environment.rb", __FILE__)
6
6
  require "rails/test_help"
7
7
  require "rspec/rails"
8
8
 
9
+ require 'debugger'
10
+
9
11
  ENGINE_RAILS_ROOT=File.join(File.dirname(__FILE__), '../')
10
12
 
11
13
  ActionMailer::Base.delivery_method = :test
@@ -60,6 +60,30 @@ describe "Action Group" do
60
60
  group_child = ExtremeActionGroup.find_by_name "group_child"
61
61
  group_parent.actions.include?(group_child.super_action).should be_true
62
62
  group_parent.actions.include?(simple_action_two.super_action).should be_true
63
- p group_parent.actions
63
+ end
64
+
65
+ it "should export: read groups and sync with existing, without deleting non-volatile groups" do
66
+ simple_action_one = FactoryGirl.create(:extreme_simple_action, :controller_name => 'UsersController', :action_name => 'index')
67
+ simple_action_two = FactoryGirl.create(:extreme_simple_action_helper, :helper_name => 'UsersHelper', :method_name => 'show')
68
+ hash = {"group_child" => [{"action_name" => "index", "controller_name" => 'UsersController'}], "group_parent"=>[{"group"=>"group_child"},{"method_name" => "show", "helper_name" => 'UsersHelper'}]}
69
+ File.open("#{ENGINE_RAILS_ROOT}/spec/support/extreme_aas_groups.yml", "w") do |out|
70
+ YAML.dump hash, out
71
+ end
72
+
73
+ ExtremeActionGroup.export "#{ENGINE_RAILS_ROOT}/spec/support/extreme_aas_groups.yml"
74
+ ExtremeActionGroup.find_by_name("default").should_not be_nil
75
+ end
76
+
77
+ it "should export: read groups and sync with existing, with deleting volatile groups" do
78
+ group = FactoryGirl.create(:extreme_action_group, :volatile => true)
79
+ simple_action_one = FactoryGirl.create(:extreme_simple_action, :controller_name => 'UsersController', :action_name => 'index')
80
+ simple_action_two = FactoryGirl.create(:extreme_simple_action_helper, :helper_name => 'UsersHelper', :method_name => 'show')
81
+ hash = {"group_child" => [{"action_name" => "index", "controller_name" => 'UsersController'}], "group_parent"=>[{"group"=>"group_child"},{"method_name" => "show", "helper_name" => 'UsersHelper'}]}
82
+ File.open("#{ENGINE_RAILS_ROOT}/spec/support/extreme_aas_groups.yml", "w") do |out|
83
+ YAML.dump hash, out
84
+ end
85
+
86
+ ExtremeActionGroup.export "#{ENGINE_RAILS_ROOT}/spec/support/extreme_aas_groups.yml"
87
+ ExtremeActionGroup.find_by_name(group.name).should be_nil
64
88
  end
65
89
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: extreme_aas
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,11 +10,11 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-04-18 00:00:00.000000000 Z
13
+ date: 2012-04-19 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
17
- requirement: &2152734380 !ruby/object:Gem::Requirement
17
+ requirement: &2152188960 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,21 +22,21 @@ dependencies:
22
22
  version: 3.2.2
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2152734380
25
+ version_requirements: *2152188960
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: capybara
28
- requirement: &2152733640 !ruby/object:Gem::Requirement
28
+ requirement: &2152187740 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.4.0
34
- type: :runtime
34
+ type: :development
35
35
  prerelease: false
36
- version_requirements: *2152733640
36
+ version_requirements: *2152187740
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rspec-rails
39
- requirement: &2152732940 !ruby/object:Gem::Requirement
39
+ requirement: &2152186900 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,21 @@ dependencies:
44
44
  version: '2.5'
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *2152732940
47
+ version_requirements: *2152186900
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: factory_girl_rails
50
- requirement: &2152732400 !ruby/object:Gem::Requirement
50
+ requirement: &2152108060 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *2152108060
59
+ - !ruby/object:Gem::Dependency
60
+ name: debugger
61
+ requirement: &2152106760 !ruby/object:Gem::Requirement
51
62
  none: false
52
63
  requirements:
53
64
  - - ! '>='
@@ -55,10 +66,10 @@ dependencies:
55
66
  version: '0'
56
67
  type: :development
57
68
  prerelease: false
58
- version_requirements: *2152732400
69
+ version_requirements: *2152106760
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: mysql2
61
- requirement: &2152731200 !ruby/object:Gem::Requirement
72
+ requirement: &2152105580 !ruby/object:Gem::Requirement
62
73
  none: false
63
74
  requirements:
64
75
  - - ! '>='
@@ -66,7 +77,7 @@ dependencies:
66
77
  version: '0'
67
78
  type: :development
68
79
  prerelease: false
69
- version_requirements: *2152731200
80
+ version_requirements: *2152105580
70
81
  description: This gem allows you to specify permissions at controller action or helper
71
82
  methods levels.
72
83
  email:
@@ -89,11 +100,13 @@ files:
89
100
  - app/models/extreme_aas/extreme_grant.rb
90
101
  - app/models/extreme_aas/extreme_profile.rb
91
102
  - app/models/extreme_aas/extreme_simple_action.rb
103
+ - extreme_aas-0.0.1.gem
92
104
  - extreme_aas.gemspec
93
105
  - lib/extreme_aas.rb
94
106
  - lib/extreme_aas/engine.rb
95
107
  - lib/extreme_aas/version.rb
96
108
  - lib/generators/extreme_aas/extreme_aas_generator.rb
109
+ - lib/generators/extreme_aas/templates/extreme_aas_groups.yml
97
110
  - lib/generators/extreme_aas/templates/migration.rb
98
111
  - lib/tasks/sync.rake
99
112
  - spec/dummy/Gemfile.lock
@@ -130,7 +143,7 @@ files:
130
143
  - spec/dummy/config/locales/en.yml
131
144
  - spec/dummy/config/routes.rb
132
145
  - spec/dummy/db/migrate/20120404105554_create_users.rb
133
- - spec/dummy/db/migrate/20120413132357_create_extreme_aas_tables.rb
146
+ - spec/dummy/db/migrate/20120419100824_create_extreme_aas_tables.rb
134
147
  - spec/dummy/db/schema.rb
135
148
  - spec/dummy/public/401.html
136
149
  - spec/dummy/public/404.html
@@ -172,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
185
  version: 1.3.6
173
186
  requirements: []
174
187
  rubyforge_project:
175
- rubygems_version: 1.8.11
188
+ rubygems_version: 1.8.10
176
189
  signing_key:
177
190
  specification_version: 3
178
191
  summary: Gem for implementing Authentication Authorization System.
@@ -211,7 +224,7 @@ test_files:
211
224
  - spec/dummy/config/locales/en.yml
212
225
  - spec/dummy/config/routes.rb
213
226
  - spec/dummy/db/migrate/20120404105554_create_users.rb
214
- - spec/dummy/db/migrate/20120413132357_create_extreme_aas_tables.rb
227
+ - spec/dummy/db/migrate/20120419100824_create_extreme_aas_tables.rb
215
228
  - spec/dummy/db/schema.rb
216
229
  - spec/dummy/public/401.html
217
230
  - spec/dummy/public/404.html