rails-canhaz 0.1.2 → 0.2.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.
@@ -24,4 +24,43 @@ class CanHazPermission < ActiveRecord::Base
|
|
24
24
|
results.first
|
25
25
|
end
|
26
26
|
|
27
|
+
# Gets the permissions for multiple subjects
|
28
|
+
#
|
29
|
+
# @param subjects [Array] an array of subjects
|
30
|
+
# @param permission [Hash, String] The identifier of the permission
|
31
|
+
# @param objects [Array] an array of objects
|
32
|
+
# @return [Hash] A Hash of permissions, the key is the id of the object, the value is an array of objects that match
|
33
|
+
def self.can?(subjects, permission, objects)
|
34
|
+
|
35
|
+
return {} if subjects.size == 0 or objects.size == 0
|
36
|
+
|
37
|
+
raise NotUniqueClasses if subjects.group_by { |s| s.class }.size > 1
|
38
|
+
raise NotUniqueClasses if objects.group_by { |s| s.class }.size > 1
|
39
|
+
|
40
|
+
subject_ids = subjects.collect { |s| s.id }
|
41
|
+
object_ids = objects.collect{ |o| o.id }
|
42
|
+
|
43
|
+
results = CanHazPermission.where(
|
44
|
+
[
|
45
|
+
'csubject_id IN (?) AND cobject_id IN(?) AND csubject_type = ? AND cobject_type = ? AND permission_name = ?',
|
46
|
+
subject_ids,
|
47
|
+
object_ids,
|
48
|
+
subjects.first.class.to_s,
|
49
|
+
objects.first.class.to_s,
|
50
|
+
permission
|
51
|
+
]
|
52
|
+
)
|
53
|
+
|
54
|
+
h = {}
|
55
|
+
|
56
|
+
subjects.each do |subject|
|
57
|
+
# Get the ids of the objects that matched
|
58
|
+
matching = results.find_all { |result| result.csubject_id == subject.id}.collect { |c| c.cobject_id }
|
59
|
+
h[subject.id] = objects.find_all { |object| matching.include? object.id }
|
60
|
+
end
|
61
|
+
|
62
|
+
h
|
63
|
+
|
64
|
+
end
|
65
|
+
|
27
66
|
end
|
@@ -49,6 +49,11 @@ module CanHaz
|
|
49
49
|
!self.can?(permission, object)
|
50
50
|
end
|
51
51
|
|
52
|
+
# Removes all permissions on the current subject
|
53
|
+
def can_do_nothing
|
54
|
+
CanHazPermission.destroy_all(['csubject_id = ? AND csubject_type = ?', self.id, self.class.to_s])
|
55
|
+
end
|
56
|
+
|
52
57
|
# Gets All objects that match a given type and permission
|
53
58
|
#
|
54
59
|
# @param type [Class] The type of the objects
|
data/rails-canhaz.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'rails-canhaz'
|
3
|
-
s.version = '0.
|
4
|
-
s.date = '2012-04-
|
3
|
+
s.version = '0.2.0'
|
4
|
+
s.date = '2012-04-27'
|
5
5
|
s.summary = "A simple gem for managing permissions between rails models"
|
6
6
|
s.description = "A simple gem for managing permissions between rails models"
|
7
7
|
s.authors = ["Adrien Siami (Intrepidd)"]
|
data/test/test_canhaz.rb
CHANGED
@@ -151,5 +151,70 @@ class CanHazTest < Test::Unit::TestCase
|
|
151
151
|
|
152
152
|
end
|
153
153
|
|
154
|
+
|
155
|
+
def test_drop_all
|
156
|
+
subject = SubjectModel.new
|
157
|
+
subject.save
|
158
|
+
|
159
|
+
subject2 = SubjectModel.new
|
160
|
+
subject2.save
|
161
|
+
|
162
|
+
object1 = ObjectModel.new
|
163
|
+
object1.save
|
164
|
+
|
165
|
+
object2 = ObjectModel.new
|
166
|
+
object2.save
|
167
|
+
|
168
|
+
subject.can(:foo, object1)
|
169
|
+
subject.can(:bar, object1)
|
170
|
+
subject.can(:foo, object2)
|
171
|
+
subject.can(:bar, object2)
|
172
|
+
|
173
|
+
subject2.can(:foo, object1)
|
174
|
+
|
175
|
+
subject.can_do_nothing
|
176
|
+
|
177
|
+
subject.reload
|
178
|
+
|
179
|
+
assert subject.cannot?(:foo, object1)
|
180
|
+
assert subject.cannot?(:bar, object1)
|
181
|
+
assert subject.cannot?(:foo, object2)
|
182
|
+
assert subject.cannot?(:bar, object2)
|
183
|
+
|
184
|
+
assert subject2.reload.can?(:foo, object1)
|
185
|
+
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_multiple
|
189
|
+
s1 = SubjectModel.new
|
190
|
+
s2 = SubjectModel.new
|
191
|
+
|
192
|
+
o1 = ObjectModel.new
|
193
|
+
o2 = ObjectModel.new
|
194
|
+
|
195
|
+
s1.save
|
196
|
+
s2.save
|
197
|
+
o1.save
|
198
|
+
o2.save
|
199
|
+
|
200
|
+
s1.can(:foo, o1)
|
201
|
+
s1.can(:foo, o2)
|
202
|
+
s1.can(:bar, o2)
|
203
|
+
|
204
|
+
s2.can(:bar, o1)
|
205
|
+
s2.can(:foo, o2)
|
206
|
+
|
207
|
+
result = CanHazPermission.can?([s1, s2], :foo, [o1, o2])
|
208
|
+
|
209
|
+
assert result[s1.id] == [o1, o2]
|
210
|
+
assert result[s2.id] == [o2]
|
211
|
+
|
212
|
+
result = CanHazPermission.can?([s1, s2], :bar, [o1, o2])
|
213
|
+
|
214
|
+
assert result[s1.id] == [o2]
|
215
|
+
assert result[s2.id] == [o1]
|
216
|
+
|
217
|
+
end
|
218
|
+
|
154
219
|
end
|
155
220
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-canhaz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &9336020 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,12 +21,7 @@ dependencies:
|
|
21
21
|
version: 3.1.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ! '>='
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 3.1.0
|
24
|
+
version_requirements: *9336020
|
30
25
|
description: A simple gem for managing permissions between rails models
|
31
26
|
email: adrien@siami.fr
|
32
27
|
executables: []
|
@@ -72,7 +67,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
72
67
|
version: '0'
|
73
68
|
requirements: []
|
74
69
|
rubyforge_project:
|
75
|
-
rubygems_version: 1.8.
|
70
|
+
rubygems_version: 1.8.11
|
76
71
|
signing_key:
|
77
72
|
specification_version: 3
|
78
73
|
summary: A simple gem for managing permissions between rails models
|