i_am_i_can 3.0.0 → 3.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +1 -1
- data/lib/generators/i_am_i_can/setup_generator.rb +9 -7
- data/lib/generators/i_am_i_can/templates/initializers/i_am_i_can.erb +1 -1
- data/lib/generators/i_am_i_can/templates/migrations/i_am_i_can.erb +20 -6
- data/lib/generators/i_am_i_can/templates/models/permission.erb +1 -1
- data/lib/generators/i_am_i_can/templates/models/role.erb +1 -1
- data/lib/generators/i_am_i_can/templates/models/role_group.erb +1 -1
- data/lib/i_am_i_can/resource.rb +1 -1
- data/lib/i_am_i_can/version.rb +1 -1
- data/lib/i_am_i_can.rb +5 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56545e764dcd1ae9cae7fc388f12df0db09c7628
|
4
|
+
data.tar.gz: c8dc0126bdd98e472472cb6a105442979a19ef86
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fea3768f4b9d4391cb2fb7b0c2be7dfe7f553ead20e004bfdea97ad1a50366b85eb02ebbf905a9d85b72dab2fe4c344c1db58ba23e67bb71ee2d80bbe0c3ddc2
|
7
|
+
data.tar.gz: aa61ca4f7801fc754cb9b3516a1168de3779ad5c9a6205eb2f18f52acca4d10d0686d71e4e9907553ac50d54e5e4dc612478b07b8f5bb82903cd12473947d27c
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -136,7 +136,7 @@ Resource.that_allow(user).to(:manage) # => Active::Relation
|
|
136
136
|
has_and_belongs_to_many :stored_roles,
|
137
137
|
join_table: 'users_and_user_roles', foreign_key: 'user_role_id', class_name: 'UserRole', association_foreign_key: 'user_id'
|
138
138
|
|
139
|
-
|
139
|
+
acts_as_subject
|
140
140
|
end
|
141
141
|
```
|
142
142
|
|
@@ -55,12 +55,14 @@ module IAmICan
|
|
55
55
|
end
|
56
56
|
|
57
57
|
def tips
|
58
|
-
puts "
|
58
|
+
puts "\nAdd the code below to #{name_c}:".green
|
59
59
|
puts <<~TIPS
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
|
|
61
|
+
| has_and_belongs_to_many :stored_roles,
|
62
|
+
| join_table: '#{subj_role_tb}', foreign_key: '#{role_u}_id', class_name: '#{role_c}', association_foreign_key: '#{name_u}_id'
|
63
|
+
|
|
64
|
+
| acts_as_subject
|
65
|
+
|
|
64
66
|
TIPS
|
65
67
|
end
|
66
68
|
|
@@ -85,9 +87,9 @@ module IAmICan
|
|
85
87
|
def permission_up; @ii_opts[:permission_class].underscore.pluralize end
|
86
88
|
|
87
89
|
def subj_role_tb; name_up + '_and_' + role_up end
|
88
|
-
def group_role_tb; group_up + '_and_' + role_up end
|
90
|
+
def group_role_tb; group_up + '_and_' + role_up rescue nil end
|
89
91
|
def role_pms_tb; role_up + '_and_' + permission_up end
|
90
|
-
def group_pms_tb; group_up + '_and_' + permission_up end
|
92
|
+
def group_pms_tb; group_up + '_and_' + permission_up rescue nil end
|
91
93
|
end
|
92
94
|
end
|
93
95
|
end
|
@@ -3,6 +3,6 @@ IAmICan::Configs.set_for(subject: '<%= name_c %>',
|
|
3
3
|
permission: '<%= @ii_opts[:permission_class] %>'<% unless @ii_opts[:without_group] %>,
|
4
4
|
role_group: '<%= @ii_opts[:role_group_class] %>'<% end %>) do |config|
|
5
5
|
<% @ii_opts.except(:role_class, :permission_class, :role_group_class).each do |k, v| %>
|
6
|
-
|
6
|
+
<%= "config.#{k} = " %><%= v %>
|
7
7
|
<% end %>
|
8
8
|
end
|
@@ -7,8 +7,9 @@ class <%= name_c %>Am<%= name_c %>Can < ActiveRecord::Migration::Current
|
|
7
7
|
t.timestamps
|
8
8
|
end
|
9
9
|
|
10
|
-
add_index :<%= role_up %>, :name,
|
11
|
-
|
10
|
+
add_index :<%= role_up %>, :name, unique: true, name: '<%= role_up %>_unique_index'
|
11
|
+
|
12
|
+
# === end of role table ===
|
12
13
|
<% unless @ii_opts[:without_group] %>
|
13
14
|
create_table :<%= group_up %>, force: :cascade do |t|
|
14
15
|
t.string :name, null: false
|
@@ -17,8 +18,10 @@ class <%= name_c %>Am<%= name_c %>Can < ActiveRecord::Migration::Current
|
|
17
18
|
t.timestamps
|
18
19
|
end
|
19
20
|
|
20
|
-
add_index :<%= group_up %>, :name,
|
21
|
-
|
21
|
+
add_index :<%= group_up %>, :name, unique: true, name: '<%= group_up %>_unique_index'
|
22
|
+
|
23
|
+
# === end of role group table ===
|
24
|
+
|
22
25
|
<% end %>
|
23
26
|
create_table :<%= permission_up %>, force: :cascade do |t|
|
24
27
|
t.string :pred, null: false
|
@@ -29,8 +32,11 @@ class <%= name_c %>Am<%= name_c %>Can < ActiveRecord::Migration::Current
|
|
29
32
|
t.timestamps
|
30
33
|
end
|
31
34
|
|
32
|
-
add_index :<%= permission_up %>, %i[ pred obj_type obj_id ],
|
33
|
-
|
35
|
+
add_index :<%= permission_up %>, %i[ pred obj_type obj_id ], unique: true, name: '<%= permission_up %>_unique_index'
|
36
|
+
### Open below if you want to use `Resource.that_allow` frequently
|
37
|
+
# add_index :<%= permission_up %>, %i[ pred obj_type ], name: '<%= permission_up %>_resource_search_index'
|
38
|
+
|
39
|
+
# === end of permission table ===
|
34
40
|
|
35
41
|
create_table :<%= subj_role_tb %>, id: false, force: :cascade do |t|
|
36
42
|
t.belongs_to :<%= name_u %>, null: false#, index: false
|
@@ -41,6 +47,8 @@ class <%= name_c %>Am<%= name_c %>Can < ActiveRecord::Migration::Current
|
|
41
47
|
# add_index :<%= subj_role_tb %>, :<%= role_u %>_id, name: ':<%= subj_role_tb %>_index2'
|
42
48
|
add_index :<%= subj_role_tb %>, [ :<%= name_u %>_id, :<%= role_u %>_id ],
|
43
49
|
unique: true, name: '<%= subj_role_tb %>_uniq_index'
|
50
|
+
|
51
|
+
# === end of subject-role table ===
|
44
52
|
<% unless @ii_opts[:without_group] %>
|
45
53
|
create_table :<%= group_role_tb %>, id: false, force: :cascade do |t|
|
46
54
|
t.belongs_to :<%= group_u %>, null: false#, index: false
|
@@ -52,6 +60,8 @@ class <%= name_c %>Am<%= name_c %>Can < ActiveRecord::Migration::Current
|
|
52
60
|
add_index :<%= group_role_tb %>, [ :<%= group_u %>_id, :<%= role_u %>_id ],
|
53
61
|
unique: true, name: '<%= group_role_tb %>_uniq_index'
|
54
62
|
|
63
|
+
# === end of group-role table ===
|
64
|
+
|
55
65
|
<% end %>
|
56
66
|
create_table :<%= role_pms_tb %>, id: false, force: :cascade do |t|
|
57
67
|
t.belongs_to :<%= role_u %>, null: false#, index: false
|
@@ -62,6 +72,8 @@ class <%= name_c %>Am<%= name_c %>Can < ActiveRecord::Migration::Current
|
|
62
72
|
# add_index :<%= role_pms_tb %>, :<%= permission_u %>_id, name: '<%= role_pms_tb %>_index2'
|
63
73
|
add_index :<%= role_pms_tb %>, [ :<%= role_u %>_id, :<%= permission_u %>_id ],
|
64
74
|
unique: true, name: '<%= role_pms_tb %>_uniq_index'
|
75
|
+
|
76
|
+
# === end of role-permission table ===
|
65
77
|
<% unless @ii_opts[:without_group] %>
|
66
78
|
create_table :<%= group_pms_tb %>, id: false, force: :cascade do |t|
|
67
79
|
t.belongs_to :<%= group_u %>, null: false#, index: false
|
@@ -73,6 +85,8 @@ class <%= name_c %>Am<%= name_c %>Can < ActiveRecord::Migration::Current
|
|
73
85
|
add_index :<%= group_pms_tb %>, [ :<%= group_u %>_id, :<%= permission_u %>_id ],
|
74
86
|
unique: true, name: '<%= group_pms_tb %>_uniq_index'
|
75
87
|
|
88
|
+
# === end of group-permission table ===
|
89
|
+
|
76
90
|
<% end %>
|
77
91
|
end
|
78
92
|
end
|
@@ -5,7 +5,7 @@ class <%= permission_c %> < ActiveRecord::Base
|
|
5
5
|
has_and_belongs_to_many :related_role_groups,
|
6
6
|
join_table: '<%= group_pms_tb %>', foreign_key: :<%= group_u %>_id, class_name: '<%= group_c %>', association_foreign_key: :<%= permission_u %>_id
|
7
7
|
<% end %>
|
8
|
-
|
8
|
+
acts_as_permission
|
9
9
|
end
|
10
10
|
|
11
11
|
__END__
|
@@ -8,7 +8,7 @@ class <%= role_c %> < ActiveRecord::Base
|
|
8
8
|
has_and_belongs_to_many :stored_permissions,
|
9
9
|
join_table: '<%= role_pms_tb %>', foreign_key: :<%= permission_u %>_id, class_name: '<%= permission_c %>', association_foreign_key: :<%= role_u %>_id
|
10
10
|
|
11
|
-
|
11
|
+
acts_as_role
|
12
12
|
|
13
13
|
# default_scope { with_stored_permissions }
|
14
14
|
end
|
@@ -5,7 +5,7 @@ class RoleGroup < ActiveRecord::Base
|
|
5
5
|
has_and_belongs_to_many :members,
|
6
6
|
join_table: '<%= group_role_tb %>', foreign_key: :<%= role_u %>_id, class_name: '<%= role_c %>', association_foreign_key: :<%= group_u %>_id
|
7
7
|
|
8
|
-
|
8
|
+
acts_as_role_group
|
9
9
|
|
10
10
|
# default_scope { with_members.with_stored_permissions) }
|
11
11
|
end
|
data/lib/i_am_i_can/resource.rb
CHANGED
@@ -22,7 +22,7 @@ module IAmICan
|
|
22
22
|
def to(pred)
|
23
23
|
roles = Configs.take.subject_model._roles
|
24
24
|
permissions = Configs.take.role_model._permissions
|
25
|
-
allowed_ids = subject.send(roles).send(permissions).where(pred: pred, obj_type: records.name).pluck(:obj_id)
|
25
|
+
allowed_ids = subject.send(roles).send(permissions).where(pred: pred, obj_type: records.name).pluck(:obj_id).uniq
|
26
26
|
records.where(id: allowed_ids)
|
27
27
|
end
|
28
28
|
end
|
data/lib/i_am_i_can/version.rb
CHANGED
data/lib/i_am_i_can.rb
CHANGED
@@ -12,7 +12,7 @@ require 'i_am_i_can/subject'
|
|
12
12
|
require 'i_am_i_can/resource'
|
13
13
|
|
14
14
|
module IAmICan
|
15
|
-
def
|
15
|
+
def acts_as_subject
|
16
16
|
i_am_i_can.act = :subject
|
17
17
|
include Subject
|
18
18
|
|
@@ -27,7 +27,7 @@ module IAmICan
|
|
27
27
|
instance_exec(%i[ role ], &DynamicGenerate.assignment_helpers)
|
28
28
|
end
|
29
29
|
|
30
|
-
def
|
30
|
+
def acts_as_role
|
31
31
|
i_am_i_can.act = :role
|
32
32
|
include Role
|
33
33
|
|
@@ -40,7 +40,7 @@ module IAmICan
|
|
40
40
|
instance_exec(%i[ permission ], &DynamicGenerate.assignment_helpers)
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
43
|
+
def acts_as_role_group
|
44
44
|
i_am_i_can.act = :role_group
|
45
45
|
include Role
|
46
46
|
|
@@ -53,7 +53,7 @@ module IAmICan
|
|
53
53
|
instance_exec(%i[ role permission ], &DynamicGenerate.assignment_helpers)
|
54
54
|
end
|
55
55
|
|
56
|
-
def
|
56
|
+
def acts_as_permission
|
57
57
|
i_am_i_can.act = :permission
|
58
58
|
include Permission
|
59
59
|
|
@@ -62,7 +62,7 @@ module IAmICan
|
|
62
62
|
instance_exec(&DynamicGenerate.class_reflections)
|
63
63
|
end
|
64
64
|
|
65
|
-
def
|
65
|
+
def acts_as_allowed_resource
|
66
66
|
include Resource
|
67
67
|
end
|
68
68
|
|
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.1
|
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-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|