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.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -1
- data/README.md +46 -23
- data/i_am_i_can.gemspec +3 -2
- data/lib/generators/i_am_i_can/setup_generator.rb +53 -16
- data/lib/generators/i_am_i_can/templates/initializers/i_am_i_can.erb +8 -0
- data/lib/generators/i_am_i_can/templates/migrations/i_am_i_can.erb +78 -0
- data/lib/generators/i_am_i_can/templates/models/permission.erb +9 -2
- data/lib/generators/i_am_i_can/templates/models/role.erb +15 -4
- data/lib/generators/i_am_i_can/templates/models/role_group.erb +12 -5
- data/lib/i_am_i_can/configs/config.rb +32 -0
- data/lib/i_am_i_can/configs/configs.rb +29 -0
- data/lib/i_am_i_can/configurable.rb +28 -0
- data/lib/i_am_i_can/dynamic_generate.rb +95 -0
- data/lib/i_am_i_can/permission/assignment.rb +3 -18
- data/lib/i_am_i_can/permission/definition.rb +1 -21
- data/lib/i_am_i_can/permission/helpers.rb +35 -8
- data/lib/i_am_i_can/permission.rb +50 -50
- data/lib/i_am_i_can/reflection.rb +25 -0
- data/lib/i_am_i_can/resource.rb +29 -0
- data/lib/i_am_i_can/role/assignment.rb +2 -16
- data/lib/i_am_i_can/role/definition.rb +4 -46
- data/lib/i_am_i_can/role/helpers.rb +43 -5
- data/lib/i_am_i_can/role.rb +17 -0
- data/lib/i_am_i_can/subject/permission_querying.rb +4 -4
- data/lib/i_am_i_can/subject.rb +24 -0
- data/lib/i_am_i_can/version.rb +1 -1
- data/lib/i_am_i_can.rb +52 -35
- metadata +32 -12
- data/lib/generators/i_am_i_can/templates/migrations/add_to_subject.erb +0 -5
- data/lib/generators/i_am_i_can/templates/migrations/permission.erb +0 -15
- data/lib/generators/i_am_i_can/templates/migrations/role.erb +0 -13
- data/lib/generators/i_am_i_can/templates/migrations/role_group.erb +0 -14
- 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/
|
7
|
-
require 'i_am_i_can/
|
8
|
-
require 'i_am_i_can/
|
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/
|
11
|
-
require 'i_am_i_can/
|
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
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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.
|
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.
|
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-
|
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)
|
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/
|
178
|
-
- lib/generators/i_am_i_can/templates/migrations/
|
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:
|
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
|
239
|
+
summary: "(RBAC like) Concise and Natural DSL for `Subject - Role(Role Group) - Permission
|
240
|
+
- Resource` Management."
|
221
241
|
test_files: []
|
@@ -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
|
data/lib/i_am_i_can/config.rb
DELETED
@@ -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
|