extreme_aas 0.0.1 → 0.0.2

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.
@@ -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