i_am_i_can 3.0.0pre → 3.0.0

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 (34) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +3 -1
  3. data/README.md +46 -23
  4. data/i_am_i_can.gemspec +3 -2
  5. data/lib/generators/i_am_i_can/setup_generator.rb +53 -16
  6. data/lib/generators/i_am_i_can/templates/initializers/i_am_i_can.erb +8 -0
  7. data/lib/generators/i_am_i_can/templates/migrations/i_am_i_can.erb +78 -0
  8. data/lib/generators/i_am_i_can/templates/models/permission.erb +9 -2
  9. data/lib/generators/i_am_i_can/templates/models/role.erb +15 -4
  10. data/lib/generators/i_am_i_can/templates/models/role_group.erb +12 -5
  11. data/lib/i_am_i_can/configs/config.rb +32 -0
  12. data/lib/i_am_i_can/configs/configs.rb +29 -0
  13. data/lib/i_am_i_can/configurable.rb +28 -0
  14. data/lib/i_am_i_can/dynamic_generate.rb +95 -0
  15. data/lib/i_am_i_can/permission/assignment.rb +3 -18
  16. data/lib/i_am_i_can/permission/definition.rb +1 -21
  17. data/lib/i_am_i_can/permission/helpers.rb +35 -8
  18. data/lib/i_am_i_can/permission.rb +50 -50
  19. data/lib/i_am_i_can/reflection.rb +25 -0
  20. data/lib/i_am_i_can/resource.rb +29 -0
  21. data/lib/i_am_i_can/role/assignment.rb +2 -16
  22. data/lib/i_am_i_can/role/definition.rb +4 -46
  23. data/lib/i_am_i_can/role/helpers.rb +43 -5
  24. data/lib/i_am_i_can/role.rb +17 -0
  25. data/lib/i_am_i_can/subject/permission_querying.rb +4 -4
  26. data/lib/i_am_i_can/subject.rb +24 -0
  27. data/lib/i_am_i_can/version.rb +1 -1
  28. data/lib/i_am_i_can.rb +52 -35
  29. metadata +32 -12
  30. data/lib/generators/i_am_i_can/templates/migrations/add_to_subject.erb +0 -5
  31. data/lib/generators/i_am_i_can/templates/migrations/permission.erb +0 -15
  32. data/lib/generators/i_am_i_can/templates/migrations/role.erb +0 -13
  33. data/lib/generators/i_am_i_can/templates/migrations/role_group.erb +0 -14
  34. data/lib/i_am_i_can/config.rb +0 -14
data/lib/i_am_i_can.rb CHANGED
@@ -3,52 +3,67 @@ require 'active_support/core_ext/object/inclusion'
3
3
  require 'active_support/core_ext/hash/deep_merge'
4
4
 
5
5
  require 'i_am_i_can/version'
6
- require 'i_am_i_can/config'
7
- require 'i_am_i_can/role/definition'
8
- require 'i_am_i_can/role/assignment'
6
+ require 'i_am_i_can/configurable'
7
+ require 'i_am_i_can/reflection'
8
+ require 'i_am_i_can/dynamic_generate'
9
+ require 'i_am_i_can/role'
9
10
  require 'i_am_i_can/permission'
10
- require 'i_am_i_can/permission/definition'
11
- require 'i_am_i_can/permission/assignment'
12
- require 'i_am_i_can/subject/role_querying'
13
- require 'i_am_i_can/subject/permission_querying'
11
+ require 'i_am_i_can/subject'
12
+ require 'i_am_i_can/resource'
14
13
 
15
14
  module IAmICan
16
- def act_as_i_am_i_can role_model: "#{name}Role".constantize,
17
- role_group_model: ("#{name}RoleGroup".constantize rescue nil),
18
- permission_model: "#{name}Permission".constantize, **options
19
- cattr_accessor :ii_config do
20
- IAmICan::Config.new(
21
- role_model: role_model,
22
- role_group_model: role_group_model,
23
- permission_model: permission_model,
24
- subject_model: self, **options
25
- )
26
- end
27
- role_model.cattr_accessor(:config) { ii_config }
28
- role_group_model&.cattr_accessor(:config) { ii_config }
29
-
30
- extend IAmICan::Role::Definition
31
- include IAmICan::Role::Assignment
32
- include IAmICan::Subject::RoleQuerying
33
-
34
- permission_model.extend IAmICan::Permission
35
- role_model.extend IAmICan::Permission::Definition
36
- role_model.include IAmICan::Permission::Assignment
37
- role_group_model&.extend IAmICan::Permission::Definition
38
- role_group_model&.include IAmICan::Permission::Assignment
39
- self.include IAmICan::Subject::PermissionQuerying
15
+ def act_as_subject
16
+ i_am_i_can.act = :subject
17
+ include Subject
18
+
19
+ extend Role::Definition
20
+ include Role::Assignment
21
+ include Subject::RoleQuerying
22
+ include Subject::PermissionQuerying
23
+
24
+ include Reflection
25
+ instance_exec(%i[ role ], &DynamicGenerate.scopes)
26
+ instance_exec(&DynamicGenerate.class_reflections)
27
+ instance_exec(%i[ role ], &DynamicGenerate.assignment_helpers)
40
28
  end
41
29
 
42
30
  def act_as_role
43
- #
31
+ i_am_i_can.act = :role
32
+ include Role
33
+
34
+ extend Permission::Definition
35
+ include Permission::Assignment
36
+
37
+ include Reflection
38
+ instance_exec(%i[ subject role_group permission ], &DynamicGenerate.scopes)
39
+ instance_exec(&DynamicGenerate.class_reflections)
40
+ instance_exec(%i[ permission ], &DynamicGenerate.assignment_helpers)
44
41
  end
45
42
 
46
43
  def act_as_role_group
47
- #
44
+ i_am_i_can.act = :role_group
45
+ include Role
46
+
47
+ extend Permission::Definition
48
+ include Permission::Assignment
49
+
50
+ include Reflection
51
+ instance_exec(%i[ permission role ], &DynamicGenerate.scopes)
52
+ instance_exec(&DynamicGenerate.class_reflections)
53
+ instance_exec(%i[ role permission ], &DynamicGenerate.assignment_helpers)
48
54
  end
49
55
 
50
56
  def act_as_permission
51
- #
57
+ i_am_i_can.act = :permission
58
+ include Permission
59
+
60
+ include Reflection
61
+ instance_exec(%i[ role role_group ], &DynamicGenerate.scopes)
62
+ instance_exec(&DynamicGenerate.class_reflections)
63
+ end
64
+
65
+ def act_as_allowed_resource
66
+ include Resource
52
67
  end
53
68
 
54
69
  class Error < StandardError; end
@@ -56,4 +71,6 @@ module IAmICan
56
71
  class InsufficientPermission < Error; end
57
72
  end
58
73
 
59
- ActiveRecord::Base.extend IAmICan
74
+ ActiveRecord::Base.include IAmICan::Configurable
75
+ ActiveRecord::Base.extend IAmICan
76
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: i_am_i_can
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0pre
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - zhandao
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-10-21 00:00:00.000000000 Z
11
+ date: 2018-10-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pg
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: simplecov
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -150,8 +164,8 @@ dependencies:
150
164
  - - ">="
151
165
  - !ruby/object:Gem::Version
152
166
  version: '0'
153
- description: Concise and Natural DSL for `Subject - Role(Role Group) - Permission`
154
- Management.
167
+ description: "(RBAC like) Concise and Natural DSL for `Subject - Role(Role Group)
168
+ - Permission - Resource` Management."
155
169
  email:
156
170
  - x@skippingcat.com
157
171
  executables: []
@@ -174,23 +188,28 @@ files:
174
188
  - bin/setup
175
189
  - i_am_i_can.gemspec
176
190
  - lib/generators/i_am_i_can/setup_generator.rb
177
- - lib/generators/i_am_i_can/templates/migrations/add_to_subject.erb
178
- - lib/generators/i_am_i_can/templates/migrations/permission.erb
179
- - lib/generators/i_am_i_can/templates/migrations/role.erb
180
- - lib/generators/i_am_i_can/templates/migrations/role_group.erb
191
+ - lib/generators/i_am_i_can/templates/initializers/i_am_i_can.erb
192
+ - lib/generators/i_am_i_can/templates/migrations/i_am_i_can.erb
181
193
  - lib/generators/i_am_i_can/templates/models/permission.erb
182
194
  - lib/generators/i_am_i_can/templates/models/role.erb
183
195
  - lib/generators/i_am_i_can/templates/models/role_group.erb
184
196
  - lib/i_am_i_can.rb
185
- - lib/i_am_i_can/config.rb
197
+ - lib/i_am_i_can/configs/config.rb
198
+ - lib/i_am_i_can/configs/configs.rb
199
+ - lib/i_am_i_can/configurable.rb
200
+ - lib/i_am_i_can/dynamic_generate.rb
186
201
  - lib/i_am_i_can/permission.rb
187
202
  - lib/i_am_i_can/permission/assignment.rb
188
203
  - lib/i_am_i_can/permission/definition.rb
189
204
  - lib/i_am_i_can/permission/helpers.rb
190
205
  - lib/i_am_i_can/permission/p_array.rb
206
+ - lib/i_am_i_can/reflection.rb
207
+ - lib/i_am_i_can/resource.rb
208
+ - lib/i_am_i_can/role.rb
191
209
  - lib/i_am_i_can/role/assignment.rb
192
210
  - lib/i_am_i_can/role/definition.rb
193
211
  - lib/i_am_i_can/role/helpers.rb
212
+ - lib/i_am_i_can/subject.rb
194
213
  - lib/i_am_i_can/subject/permission_querying.rb
195
214
  - lib/i_am_i_can/subject/role_querying.rb
196
215
  - lib/i_am_i_can/version.rb
@@ -209,13 +228,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
209
228
  version: '0'
210
229
  required_rubygems_version: !ruby/object:Gem::Requirement
211
230
  requirements:
212
- - - ">"
231
+ - - ">="
213
232
  - !ruby/object:Gem::Version
214
- version: 1.3.1
233
+ version: '0'
215
234
  requirements: []
216
235
  rubyforge_project:
217
236
  rubygems_version: 2.6.12
218
237
  signing_key:
219
238
  specification_version: 4
220
- summary: Concise and Natural DSL for `Subject - Role(Role Group) - Permission` Management.
239
+ summary: "(RBAC like) Concise and Natural DSL for `Subject - Role(Role Group) - Permission
240
+ - Resource` Management."
221
241
  test_files: []
@@ -1,5 +0,0 @@
1
- class IAmICanAddRoleIdsTo<%= name.camelize %> < ActiveRecord::Migration::Current
2
- def change
3
- add_column :<%= "#{name.underscore.pluralize}" %>, :role_ids, :integer, array: true, default: [ ]
4
- end
5
- end
@@ -1,15 +0,0 @@
1
- class IAmICanCreate<%= "#{name.underscore}_permissions".camelize %> < ActiveRecord::Migration::Current
2
- def change
3
- create_table :<%= "#{name.underscore}_permissions" %>, force: :cascade do |t|
4
- t.string :pred, null: false
5
- t.string :obj_type
6
- t.integer :obj_id
7
- t.string :desc
8
-
9
- t.timestamps
10
- end
11
-
12
- add_index :<%= "#{name.underscore}_permissions" %>, %i[pred obj_type obj_id],
13
- unique: true, name: 'permission_unique_index', using: :btree
14
- end
15
- end
@@ -1,13 +0,0 @@
1
- class IAmICanCreate<%= "#{name.underscore}_roles".camelize %> < ActiveRecord::Migration::Current
2
- def change
3
- create_table :<%= "#{name.underscore}_roles" %>, force: :cascade do |t|
4
- t.string :name, null: false
5
- t.integer :permission_ids, array: true, default: [ ]
6
- t.string :desc
7
-
8
- t.timestamps
9
- end
10
-
11
- add_index :<%= "#{name.underscore}_roles" %>, :name, unique: true, name: 'role_unique_index', using: :btree
12
- end
13
- end
@@ -1,14 +0,0 @@
1
- class IAmICanCreate<%= "#{name.underscore}_role_groups".camelize %> < ActiveRecord::Migration::Current
2
- def change
3
- create_table :<%= "#{name.underscore}_role_groups" %>, force: :cascade do |t|
4
- t.string :name, null: false
5
- t.integer :member_ids, array: true, default: [ ]
6
- t.integer :permission_ids, array: true, default: [ ]
7
- t.string :desc
8
-
9
- t.timestamps
10
- end
11
-
12
- add_index :<%= "#{name.underscore}_role_groups" %>, :name, unique: true, name: 'role_group_unique_index', using: :btree
13
- end
14
- end
@@ -1,14 +0,0 @@
1
- module IAmICan
2
- class Config
3
- attr_accessor :subject_model, :role_model, :role_group_model, :permission_model,
4
- :auto_define_before, :strict_mode, :without_group, :default_save
5
-
6
- def initialize(**options)
7
- self.auto_define_before = false
8
- self.strict_mode = false
9
- self.without_group = false
10
- self.default_save = true
11
- options.each { |(key, val)| self.send("#{key}=", val) }
12
- end
13
- end
14
- end