skill_tree 0.0.1

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.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/lib/generators/skill_tree/install_generator.rb +20 -0
  3. data/lib/generators/skill_tree/orm_helpers.rb +14 -0
  4. data/lib/generators/skill_tree/templates/acl.rb +42 -0
  5. data/lib/generators/skill_tree/templates/create_skill_tree_acl_system.rb +48 -0
  6. data/lib/generators/skill_tree/templates/initializer.rb +1 -0
  7. data/lib/skill_tree.rb +15 -0
  8. data/lib/skill_tree/controller.rb +57 -0
  9. data/lib/skill_tree/errors.rb +5 -0
  10. data/lib/skill_tree/models.rb +10 -0
  11. data/lib/skill_tree/models/acl.rb +13 -0
  12. data/lib/skill_tree/models/acl_mapping.rb +16 -0
  13. data/lib/skill_tree/models/acl_ownership.rb +11 -0
  14. data/lib/skill_tree/models/permission.rb +10 -0
  15. data/lib/skill_tree/models/role.rb +22 -0
  16. data/lib/skill_tree/models/user_role.rb +14 -0
  17. data/lib/skill_tree/parser.rb +44 -0
  18. data/lib/skill_tree/parser/acl_parser.rb +42 -0
  19. data/lib/skill_tree/parser/role_parser.rb +57 -0
  20. data/lib/skill_tree/resource.rb +21 -0
  21. data/lib/skill_tree/resource/callbacks.rb +20 -0
  22. data/lib/skill_tree/resource/class_methods.rb +10 -0
  23. data/lib/skill_tree/resource/instance_methods.rb +52 -0
  24. data/lib/skill_tree/resource/relations.rb +18 -0
  25. data/lib/skill_tree/resource/scopes.rb +38 -0
  26. data/lib/skill_tree/subject.rb +53 -0
  27. data/lib/skill_tree/version.rb +3 -0
  28. data/spec/db/schema.rb +59 -0
  29. data/spec/skill_tree/controller_spec.rb +103 -0
  30. data/spec/skill_tree/generators/install_generator_spec.rb +34 -0
  31. data/spec/skill_tree/models/acl_mapping_spec.rb +46 -0
  32. data/spec/skill_tree/models/acl_ownership_spec.rb +30 -0
  33. data/spec/skill_tree/models/acl_spec.rb +32 -0
  34. data/spec/skill_tree/models/permission_spec.rb +16 -0
  35. data/spec/skill_tree/models/role_spec.rb +41 -0
  36. data/spec/skill_tree/models/user_role_spec.rb +16 -0
  37. data/spec/skill_tree/parser_spec.rb +71 -0
  38. data/spec/skill_tree/resource_spec.rb +137 -0
  39. data/spec/skill_tree/subject_spec.rb +65 -0
  40. data/spec/skill_tree_spec.rb +8 -0
  41. data/spec/spec_helper.rb +37 -0
  42. data/spec/support/acls/acl_example.rb +19 -0
  43. data/spec/support/acls/acl_example2.rb +24 -0
  44. data/spec/support/acls/acl_example3.rb +24 -0
  45. data/spec/support/acls/acl_example4.rb +24 -0
  46. data/spec/support/acls/subject_acl.rb +57 -0
  47. data/spec/support/capture_stdout.rb +12 -0
  48. data/spec/support/controllers.rb +71 -0
  49. data/spec/support/model_builder.rb +15 -0
  50. data/spec/support/models.rb +16 -0
  51. metadata +232 -0
@@ -0,0 +1,19 @@
1
+ acl :desks do |a|
2
+ a.role :guest do |r|
3
+ r.can :read
4
+ end
5
+
6
+ a.role :user do |r|
7
+ r.can :create, :read
8
+ end
9
+
10
+ a.role :editor do |r|
11
+ r.inherit :user
12
+ r.can :write
13
+ end
14
+
15
+ a.role :admin do |r|
16
+ r.inherit :editor
17
+ r.can :update, :destroy
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ acl :desks do |a|
2
+ a.role :guest do |r|
3
+ r.can :read
4
+ end
5
+
6
+ a.role :user do |r|
7
+ r.can :create, :read, :write
8
+ end
9
+
10
+ a.role :editor do |r|
11
+ r.inherit :user
12
+ r.can :write, :write, :write
13
+ end
14
+
15
+ a.role :admin do |r|
16
+ r.inherit :editor
17
+ r.can :update
18
+ end
19
+
20
+ a.role :master do |r|
21
+ r.inherit :admin
22
+ r.can :destroy
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ acl :desks, version: 1 do |a|
2
+ a.role :guest do |r|
3
+ r.can :read
4
+ end
5
+
6
+ a.role :user do |r|
7
+ r.can :create, :read, :write
8
+ end
9
+
10
+ a.role :editor do |r|
11
+ r.inherit :user
12
+ r.can :write, :write, :write
13
+ end
14
+
15
+ a.role :admin do |r|
16
+ r.inherit :editor
17
+ r.can :update
18
+ end
19
+
20
+ a.role :master do |r|
21
+ r.inherit :admin
22
+ r.can :destroy
23
+ end
24
+ end
@@ -0,0 +1,24 @@
1
+ acl :desks, version: 2 do |a|
2
+ a.role :guest do |r|
3
+ r.can :read
4
+ end
5
+
6
+ a.role :user do |r|
7
+ r.can :create, :read, :write
8
+ end
9
+
10
+ a.role :editor do |r|
11
+ r.inherit :user
12
+ r.can :write, :write, :write
13
+ end
14
+
15
+ a.role :admin do |r|
16
+ r.inherit :editor
17
+ r.can :update
18
+ end
19
+
20
+ a.role :master do |r|
21
+ r.inherit :admin
22
+ r.can :destroy
23
+ end
24
+ end
@@ -0,0 +1,57 @@
1
+ acl :posts, default_for: :posts do |a|
2
+ a.role :guest do |r|
3
+ r.can :read
4
+ end
5
+
6
+ a.role :user do |r|
7
+ r.can :create, :read
8
+ end
9
+
10
+ a.role :editor do |r|
11
+ r.inherit :user
12
+ r.can :write
13
+ end
14
+
15
+ a.role :admin do |r|
16
+ r.inherit :editor
17
+ r.can :update, :destroy
18
+ end
19
+ end
20
+
21
+ acl :private_post do |a|
22
+ a.role :guest do
23
+ end
24
+
25
+ a.role :user do |r|
26
+ r.can :create
27
+ end
28
+
29
+ a.role :editor do |r|
30
+ r.inherit :user
31
+ r.can :read, :write, :update
32
+ end
33
+
34
+ a.role :admin do |r|
35
+ r.inherit :editor
36
+ r.can :destroy
37
+ end
38
+ end
39
+
40
+ acl :other_post, default_for: :post_with_authors do |a|
41
+ a.role :guest do
42
+ end
43
+
44
+ a.role :user do |r|
45
+ r.can :create
46
+ end
47
+
48
+ a.role :editor do |r|
49
+ r.inherit :user
50
+ r.can :read, :write, :update
51
+ end
52
+
53
+ a.role :admin do |r|
54
+ r.inherit :editor
55
+ r.can :destroy
56
+ end
57
+ end
@@ -0,0 +1,12 @@
1
+ require 'stringio'
2
+
3
+ module Kernel
4
+ def capture_stdout
5
+ out = StringIO.new
6
+ $stdout = out
7
+ yield
8
+ return out
9
+ ensure
10
+ $stdout = STDOUT
11
+ end
12
+ end
@@ -0,0 +1,71 @@
1
+ module MockControllerTestHelpers
2
+ def get(method_name)
3
+ described_class.new.invoke method_name
4
+ end
5
+ end
6
+
7
+ class MockController
8
+ class <<self
9
+ def before_filter(method_name, options = {})
10
+ before_filters[:all] = method_name
11
+ end
12
+
13
+ def before_filters
14
+ @@before_filters ||= {}
15
+ end
16
+ end
17
+
18
+ attr_reader :name, :action_name
19
+
20
+ def invoke(action)
21
+ @action_name = action
22
+ send(before_filters[:all]) if before_filters[:all]
23
+ send(action)
24
+ end
25
+
26
+ def before_filters
27
+ self.class.before_filters
28
+ end
29
+
30
+ def current_user
31
+ end
32
+ end
33
+
34
+ class ApplicationController < MockController
35
+ include SkillTree::Controller
36
+ end
37
+
38
+ class TestController < ApplicationController
39
+ allow(:all) { true }
40
+ allow(:index, :show) { false }
41
+ allow(:create) { can?(:create, post) }
42
+ allow(:destroy) { can?(:destroy, post) }
43
+
44
+ def index
45
+ end
46
+
47
+ def show
48
+ end
49
+
50
+ def update
51
+ end
52
+
53
+ def create
54
+ end
55
+
56
+ def destroy
57
+ end
58
+
59
+ protected
60
+
61
+ def post
62
+ @post ||= Post.first
63
+ end
64
+ end
65
+
66
+ class Test2Controller < ApplicationController
67
+ allow(:all) { current_user }
68
+
69
+ def show
70
+ end
71
+ end
@@ -0,0 +1,15 @@
1
+ module ModelBuilder
2
+ def create(name, attributes = {})
3
+ klass = class_by_symbol(name)
4
+ klass.create!(attributes)
5
+ end
6
+
7
+ def build(name, attributes = {})
8
+ klass = class_by_symbol(name)
9
+ klass.new(attributes)
10
+ end
11
+
12
+ def class_by_symbol(name)
13
+ "SkillTree::Models::#{name.to_s.classify}".constantize
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ # Default Subject and Resource
2
+ Object.send(:remove_const, :User) if defined?(User) # we do this to undefine the model and start fresh, without any of the authorization stuff applied by tests
3
+ class User < ActiveRecord::Base
4
+ as_skill_tree_subject
5
+ end
6
+
7
+ Object.send(:remove_const, :Post) if defined?(Post)
8
+ class Post < ActiveRecord::Base
9
+ as_skill_tree_resource
10
+ end
11
+
12
+ Object.send(:remove_const, :PostWithAuthor) if defined?(PostWithAuthor)
13
+ class PostWithAuthor < ActiveRecord::Base
14
+ belongs_to :user
15
+ as_skill_tree_resource admin: :user
16
+ end
metadata ADDED
@@ -0,0 +1,232 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: skill_tree
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Piero Dotti
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-10-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '4'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '4'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
33
+ - !ruby/object:Gem::Dependency
34
+ name: activerecord
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '4'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '4'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '5'
53
+ - !ruby/object:Gem::Dependency
54
+ name: actionpack
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '4'
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '5'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '4'
70
+ - - "<"
71
+ - !ruby/object:Gem::Version
72
+ version: '5'
73
+ - !ruby/object:Gem::Dependency
74
+ name: rake
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '10.4'
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: !ruby/object:Gem::Requirement
83
+ requirements:
84
+ - - "~>"
85
+ - !ruby/object:Gem::Version
86
+ version: '10.4'
87
+ - !ruby/object:Gem::Dependency
88
+ name: rspec
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '3'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '3'
101
+ - !ruby/object:Gem::Dependency
102
+ name: generator_spec
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
115
+ - !ruby/object:Gem::Dependency
116
+ name: rspec-collection_matchers
117
+ requirement: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ type: :development
123
+ prerelease: false
124
+ version_requirements: !ruby/object:Gem::Requirement
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ description: A simple and complete ACL system for Rails, that allows to specify a
130
+ role for an user for a single resource.
131
+ email:
132
+ - piero@foldesk.com
133
+ executables: []
134
+ extensions: []
135
+ extra_rdoc_files: []
136
+ files:
137
+ - lib/generators/skill_tree/install_generator.rb
138
+ - lib/generators/skill_tree/orm_helpers.rb
139
+ - lib/generators/skill_tree/templates/acl.rb
140
+ - lib/generators/skill_tree/templates/create_skill_tree_acl_system.rb
141
+ - lib/generators/skill_tree/templates/initializer.rb
142
+ - lib/skill_tree.rb
143
+ - lib/skill_tree/controller.rb
144
+ - lib/skill_tree/errors.rb
145
+ - lib/skill_tree/models.rb
146
+ - lib/skill_tree/models/acl.rb
147
+ - lib/skill_tree/models/acl_mapping.rb
148
+ - lib/skill_tree/models/acl_ownership.rb
149
+ - lib/skill_tree/models/permission.rb
150
+ - lib/skill_tree/models/role.rb
151
+ - lib/skill_tree/models/user_role.rb
152
+ - lib/skill_tree/parser.rb
153
+ - lib/skill_tree/parser/acl_parser.rb
154
+ - lib/skill_tree/parser/role_parser.rb
155
+ - lib/skill_tree/resource.rb
156
+ - lib/skill_tree/resource/callbacks.rb
157
+ - lib/skill_tree/resource/class_methods.rb
158
+ - lib/skill_tree/resource/instance_methods.rb
159
+ - lib/skill_tree/resource/relations.rb
160
+ - lib/skill_tree/resource/scopes.rb
161
+ - lib/skill_tree/subject.rb
162
+ - lib/skill_tree/version.rb
163
+ - spec/db/schema.rb
164
+ - spec/skill_tree/controller_spec.rb
165
+ - spec/skill_tree/generators/install_generator_spec.rb
166
+ - spec/skill_tree/models/acl_mapping_spec.rb
167
+ - spec/skill_tree/models/acl_ownership_spec.rb
168
+ - spec/skill_tree/models/acl_spec.rb
169
+ - spec/skill_tree/models/permission_spec.rb
170
+ - spec/skill_tree/models/role_spec.rb
171
+ - spec/skill_tree/models/user_role_spec.rb
172
+ - spec/skill_tree/parser_spec.rb
173
+ - spec/skill_tree/resource_spec.rb
174
+ - spec/skill_tree/subject_spec.rb
175
+ - spec/skill_tree_spec.rb
176
+ - spec/spec_helper.rb
177
+ - spec/support/acls/acl_example.rb
178
+ - spec/support/acls/acl_example2.rb
179
+ - spec/support/acls/acl_example3.rb
180
+ - spec/support/acls/acl_example4.rb
181
+ - spec/support/acls/subject_acl.rb
182
+ - spec/support/capture_stdout.rb
183
+ - spec/support/controllers.rb
184
+ - spec/support/model_builder.rb
185
+ - spec/support/models.rb
186
+ homepage: http://github.com/ProGM/skill_tree
187
+ licenses: []
188
+ metadata: {}
189
+ post_install_message:
190
+ rdoc_options: []
191
+ require_paths:
192
+ - lib
193
+ required_ruby_version: !ruby/object:Gem::Requirement
194
+ requirements:
195
+ - - ">="
196
+ - !ruby/object:Gem::Version
197
+ version: 1.9.3
198
+ required_rubygems_version: !ruby/object:Gem::Requirement
199
+ requirements:
200
+ - - ">="
201
+ - !ruby/object:Gem::Version
202
+ version: '0'
203
+ requirements: []
204
+ rubyforge_project:
205
+ rubygems_version: 2.4.5.1
206
+ signing_key:
207
+ specification_version: 4
208
+ summary: Resource-based ACL system for Rails.
209
+ test_files:
210
+ - spec/db/schema.rb
211
+ - spec/skill_tree/controller_spec.rb
212
+ - spec/skill_tree/generators/install_generator_spec.rb
213
+ - spec/skill_tree/models/acl_mapping_spec.rb
214
+ - spec/skill_tree/models/acl_ownership_spec.rb
215
+ - spec/skill_tree/models/acl_spec.rb
216
+ - spec/skill_tree/models/permission_spec.rb
217
+ - spec/skill_tree/models/role_spec.rb
218
+ - spec/skill_tree/models/user_role_spec.rb
219
+ - spec/skill_tree/parser_spec.rb
220
+ - spec/skill_tree/resource_spec.rb
221
+ - spec/skill_tree/subject_spec.rb
222
+ - spec/skill_tree_spec.rb
223
+ - spec/spec_helper.rb
224
+ - spec/support/acls/acl_example.rb
225
+ - spec/support/acls/acl_example2.rb
226
+ - spec/support/acls/acl_example3.rb
227
+ - spec/support/acls/acl_example4.rb
228
+ - spec/support/acls/subject_acl.rb
229
+ - spec/support/capture_stdout.rb
230
+ - spec/support/controllers.rb
231
+ - spec/support/model_builder.rb
232
+ - spec/support/models.rb