rails-canhaz 1.0.6 → 1.0.7
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 +7 -0
- data/.travis.yml +4 -0
- data/Gemfile +3 -3
- data/README.md +3 -0
- data/lib/rails-canhaz/canhaz_permission.rb +2 -35
- data/lib/rails-canhaz/version.rb +3 -0
- data/rails-canhaz.gemspec +21 -11
- data/test/test_canhaz.rb +0 -32
- metadata +66 -17
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 51e4c69f388ed0700f9c90d213a0695e821d5379
|
4
|
+
data.tar.gz: 7061227f87c107b4b1664354ae4653ef2b05de58
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4c29cceebee70ea7eaf94af4a1ee4fb457117f41532890476b40b567e29ef7cdddaada9d4b324f1aff540532784a8b4ff8dcc0c061322ec891ad1838e74306c6
|
7
|
+
data.tar.gz: 08ebd85f17d55c26b2efa8952ab33150876f50b32875f8866e0241ecca871d000d2abef7a2348b299a660974000f135d8793aae905fd201a34233d95bde7185d
|
data/.travis.yml
ADDED
data/Gemfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
source
|
1
|
+
source 'https://rubygems.org'
|
2
2
|
|
3
|
-
gem
|
4
|
-
|
3
|
+
# Specify your gem's dependencies in mongoid_counter_cache.gemspec
|
4
|
+
gemspec
|
data/README.md
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
Psst, looking for a gem that works with the beta release of Rails4 ? [Check the prerelease branch !](https://github.com/intrepidd/rails-canhaz/tree/4.0.0.beta1)
|
2
|
+
|
3
|
+
[A port of this gem working on mongoid](https://github.com/intrepidd/mongoid-canhaz) is now avaible.
|
1
4
|
# Rails-Canhaz
|
2
5
|
|
3
6
|
This gem is a simple activerecord extention that allows any application using activerecord to manage permissions based roles.
|
@@ -4,7 +4,7 @@ class CanHazPermission < ActiveRecord::Base
|
|
4
4
|
|
5
5
|
attr_accessible :csubject_id, :csubject_type, :cobject_type, :cobject_id, :permission_name
|
6
6
|
|
7
|
-
validates :cobject_id, :uniqueness => {:scope => [:permission_name, :csubject_id]}
|
7
|
+
validates :cobject_id, :uniqueness => {:scope => [:permission_name, :csubject_id, :csubject_type, :cobject_type]}
|
8
8
|
|
9
9
|
# Gets the permission row between two objects
|
10
10
|
#
|
@@ -63,41 +63,8 @@ class CanHazPermission < ActiveRecord::Base
|
|
63
63
|
matching = results.find_all { |result| result.csubject_id == subject.id}.collect { |c| c.cobject_id }
|
64
64
|
h[subject.id] = objects.find_all { |object| matching.include? object.id }
|
65
65
|
end
|
66
|
-
h
|
67
|
-
end
|
68
|
-
|
69
|
-
# Gets Permissions for a given object class, subject class, and permission name in an organized hash
|
70
|
-
#
|
71
|
-
# @param [Class] object The object class
|
72
|
-
# @param [Class] subject The subject class
|
73
|
-
# @param [String, Symbol] The name of the permission
|
74
|
-
def self.objects_and_subjects_from_permission(object, subject, permission)
|
75
|
-
raise CanHaz::Exceptions::NotACanHazObject unless object.include?(CanHaz::ModelExtensions::Object)
|
76
|
-
raise CanHaz::Exceptions::NotACanHazSubject unless subject.include?(CanHaz::ModelExtensions::Subject)
|
77
|
-
|
78
|
-
permissions = CanHazPermission.where(
|
79
|
-
:csubject_type => subject.to_s,
|
80
|
-
:cobject_type => object.to_s,
|
81
|
-
:permission_name => permission
|
82
|
-
)
|
83
66
|
|
84
|
-
|
85
|
-
|
86
|
-
subjects = subject.find_all_by_id(permissions.collect(&:csubject_id)).inject({}) { |res, cur| res[cur.id] = cur; res} # Map by id for better access
|
87
|
-
objects = object.find_all_by_id(permissions.collect(&:cobject_id)).inject({}) { |res, cur| res[cur.id] = cur; res} # Map by id for better access
|
88
|
-
|
89
|
-
result = []
|
90
|
-
|
91
|
-
permissions.each do |permission|
|
92
|
-
found = result.find { |row| row[:subject] == subjects[permission.csubject_id]}
|
93
|
-
if found
|
94
|
-
found[:objects].push objects[permission.cobject_id]
|
95
|
-
else
|
96
|
-
result.push({:subject => subjects[permission.csubject_id], :objects => [objects[permission.cobject_id]]})
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
result
|
67
|
+
h
|
101
68
|
|
102
69
|
end
|
103
70
|
|
data/rails-canhaz.gemspec
CHANGED
@@ -1,15 +1,25 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
s.summary = "A simple gem for managing permissions between rails models"
|
6
|
-
s.description = "A simple gem for managing permissions between rails models"
|
7
|
-
s.authors = ["Adrien Siami (Intrepidd)"]
|
8
|
-
s.email = 'adrien@siami.fr'
|
9
|
-
s.files = `git ls-files`.split("\n")
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'rails-canhaz/version'
|
10
5
|
|
11
|
-
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "rails-canhaz"
|
8
|
+
gem.version = CanHaz::VERSION
|
9
|
+
gem.authors = ["Intrepidd"]
|
10
|
+
gem.email = ["adrien@siami.fr"]
|
11
|
+
gem.description = 'A simple gem for managing permissions between rails models'
|
12
|
+
gem.summary = 'A simple gem for managing permissions between rails models'
|
13
|
+
gem.homepage = "http://github.com/Intrepidd/rails-canhaz"
|
12
14
|
|
13
|
-
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
14
19
|
|
20
|
+
gem.add_dependency 'activerecord', '>= 3.1.0'
|
21
|
+
gem.add_dependency 'rake'
|
22
|
+
|
23
|
+
gem.add_development_dependency 'rake'
|
24
|
+
gem.add_development_dependency 'sqlite3'
|
15
25
|
end
|
data/test/test_canhaz.rb
CHANGED
@@ -270,37 +270,5 @@ class CanHazTest < Test::Unit::TestCase
|
|
270
270
|
assert_equal false, s.can?(:foo)
|
271
271
|
end
|
272
272
|
|
273
|
-
def test_objects_subjects_permission
|
274
|
-
|
275
|
-
s1 = SubjectModel.create!
|
276
|
-
s2 = SubjectModel.create!
|
277
|
-
o1 = ObjectModel.create!
|
278
|
-
o2 = ObjectModel.create!
|
279
|
-
o3 = ObjectModel.create!
|
280
|
-
|
281
|
-
s1.can!(:foo_osp, o1)
|
282
|
-
s1.can!(:foo_osp, o3)
|
283
|
-
|
284
|
-
s2.can!(:foo_osp, o1)
|
285
|
-
s2.can!(:foo_osp, o2)
|
286
|
-
|
287
|
-
res = CanHazPermission.objects_and_subjects_from_permission(ObjectModel, SubjectModel, :foo_osp)
|
288
|
-
|
289
|
-
assert_equal 2, res.count
|
290
|
-
|
291
|
-
subjects = Set.new(res.collect { |row| row[:subject] }) # Sets are unsorted arrays
|
292
|
-
|
293
|
-
assert_equal Set.new([s1, s2]), subjects # Both arrays contain the same values, independently of the order
|
294
|
-
|
295
|
-
objects = Set.new(res.find { |row| row[:subject] == s1 }[:objects])
|
296
|
-
|
297
|
-
assert_equal Set.new([o1, o3]), objects
|
298
|
-
|
299
|
-
objects = Set.new(res.find { |row| row[:subject] == s2 }[:objects])
|
300
|
-
|
301
|
-
assert_equal Set.new([o1, o2]), objects
|
302
|
-
|
303
|
-
end
|
304
|
-
|
305
273
|
end
|
306
274
|
|
metadata
CHANGED
@@ -1,39 +1,80 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails-canhaz
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
|
-
-
|
7
|
+
- Intrepidd
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-05-28 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: activerecord
|
16
|
-
prerelease: false
|
17
15
|
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 3.1.0
|
22
|
-
none: false
|
23
20
|
type: :runtime
|
21
|
+
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
23
|
requirements:
|
26
|
-
- -
|
24
|
+
- - '>='
|
27
25
|
- !ruby/object:Gem::Version
|
28
26
|
version: 3.1.0
|
29
|
-
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: sqlite3
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
30
69
|
description: A simple gem for managing permissions between rails models
|
31
|
-
email:
|
70
|
+
email:
|
71
|
+
- adrien@siami.fr
|
32
72
|
executables: []
|
33
73
|
extensions: []
|
34
74
|
extra_rdoc_files: []
|
35
75
|
files:
|
36
76
|
- .gitignore
|
77
|
+
- .travis.yml
|
37
78
|
- Gemfile
|
38
79
|
- README.md
|
39
80
|
- Rakefile
|
@@ -46,6 +87,7 @@ files:
|
|
46
87
|
- lib/rails-canhaz/extensions_object.rb
|
47
88
|
- lib/rails-canhaz/extensions_subject.rb
|
48
89
|
- lib/rails-canhaz/model_extensions.rb
|
90
|
+
- lib/rails-canhaz/version.rb
|
49
91
|
- rails-canhaz.gemspec
|
50
92
|
- test/.gitkeep
|
51
93
|
- test/init_tests.rb
|
@@ -56,26 +98,33 @@ files:
|
|
56
98
|
- test/test_canhaz.rb
|
57
99
|
homepage: http://github.com/Intrepidd/rails-canhaz
|
58
100
|
licenses: []
|
101
|
+
metadata: {}
|
59
102
|
post_install_message:
|
60
103
|
rdoc_options: []
|
61
104
|
require_paths:
|
62
105
|
- lib
|
63
106
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
107
|
requirements:
|
65
|
-
- -
|
108
|
+
- - '>='
|
66
109
|
- !ruby/object:Gem::Version
|
67
110
|
version: '0'
|
68
|
-
none: false
|
69
111
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
112
|
requirements:
|
71
|
-
- -
|
113
|
+
- - '>='
|
72
114
|
- !ruby/object:Gem::Version
|
73
115
|
version: '0'
|
74
|
-
none: false
|
75
116
|
requirements: []
|
76
117
|
rubyforge_project:
|
77
|
-
rubygems_version:
|
118
|
+
rubygems_version: 2.0.3
|
78
119
|
signing_key:
|
79
|
-
specification_version:
|
120
|
+
specification_version: 4
|
80
121
|
summary: A simple gem for managing permissions between rails models
|
81
|
-
test_files:
|
122
|
+
test_files:
|
123
|
+
- test/.gitkeep
|
124
|
+
- test/init_tests.rb
|
125
|
+
- test/models/foo_model.rb
|
126
|
+
- test/models/object_model.rb
|
127
|
+
- test/models/subject_model.rb
|
128
|
+
- test/schema.rb
|
129
|
+
- test/test_canhaz.rb
|
130
|
+
has_rdoc:
|