rails-canhaz 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
@@ -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
|