mongoid_roles 0.0.3 → 0.0.4

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.
data/README.textile ADDED
@@ -0,0 +1,80 @@
1
+ h1. Mongoid Roles
2
+
3
+ Role-based authorization system for Rails & Mongoid.
4
+
5
+ Interface is based on "acl9":https://github.com/be9/acl9.
6
+
7
+
8
+ h2. Installation
9
+
10
+ Add this line to your Gemfile:
11
+
12
+ @gem 'mongoid_roles'@
13
+
14
+ h2. Subject model
15
+
16
+ <pre><code>
17
+ class User
18
+ include Mongoid::Document
19
+ include Mongoid::Roles::Subject
20
+ end
21
+ </code></pre>
22
+
23
+
24
+ h2. Object model
25
+
26
+ <pre><code>
27
+ class Foo
28
+ include Mongoid::Document
29
+ include Mongoid::Roles::Object
30
+ end
31
+
32
+ class Bar
33
+ include Mongoid::Document
34
+ include Mongoid::Roles::Object
35
+ end
36
+ </code></pre>
37
+
38
+
39
+ h2. Interface
40
+
41
+
42
+ h3. Subject model
43
+
44
+ A call of @include Mongoid::Roles::Subject@ defines following methods on the model:
45
+
46
+ @subject.has_role?(role, object = nil)@. Returns @true@ of @false@ (has or has not).
47
+
48
+ @subject.has_role!(role, object = nil)@. Assigns a @role@ for the @object@ to the @subject@.
49
+ Does nothing is subject already has such a role.
50
+
51
+ @subject.has_no_role!(role, object = nil)@. Unassigns a role from the @subject@.
52
+
53
+ @subject.has_roles_for?(object)@. Does the @subject@ has any roles for @object@? (@true@ of @false@)
54
+
55
+ @subject.has_role_for?(object)@. Same as @has_roles_for?@.
56
+
57
+ @subject.roles_for(object)@. Returns an array of @Role@ instances, corresponding to @subject@ 's roles on
58
+ @object@. E.g. @subject.roles_for(object).map(&:name).sort@ will give you role names in alphabetical order.
59
+
60
+ @subject.has_no_roles_for!(object)@. Unassign any @subject@ 's roles for a given @object@.
61
+
62
+ @subject.has_no_roles!@. Unassign all roles from @subject@.
63
+
64
+
65
+ h3. Object model
66
+
67
+ A call of @include Mongoid::Roles::Object@ defines following methods on the model:
68
+
69
+ @object.accepts_role?(role_name, subject)@. An alias for @subject.has_role?(role_name, object)@.
70
+
71
+ @object.accepts_role!(role_name, subject)@. An alias for @subject.has_role!(role_name, object)@.
72
+
73
+ @object.accepts_no_role!(role_name, subject)@. An alias for @subject.has_no_role!(role_name, object)@.
74
+
75
+ @object.accepts_roles_by?(subject)@. An alias for @subject.has_roles_for?(object)@.
76
+
77
+ @object.accepts_role_by?(subject)@. Same as @accepts_roles_by?@.
78
+
79
+ @object.accepts_roles_by(subject)@. An alias for @subject.roles_for(object)@.
80
+
@@ -9,15 +9,17 @@ module Mongoid
9
9
  field :auth_object_type, :type => String
10
10
  field :auth_object_id, :type => String
11
11
 
12
- scope :find_role_with_object, lambda{|role, object| where(:role => role, :auth_object_type => object.class.name, :auth_object_id => object.id)}
13
- scope :find_object, lambda{|object| where(:auth_object_type => object.class.name, :auth_object_id => object.id)}
14
- # validates_uniqueness_of :name
15
-
12
+ scope :find_object, lambda {|object| where(:auth_object_type => object.class.name, :auth_object_id => object.id)}
13
+ scope :find_role, lambda {|role, object = nil|
14
+ object ? where(:role => role, :auth_object_type => object.class.name, :auth_object_id => object.id) :
15
+ where(:role => role, :auth_object_type => nil, :auth_object_id => nil)
16
+ }
17
+
16
18
  class << self
17
19
 
18
20
  # subject.has_role?(role, object = nil). Returns true of false (has or has not).
19
- def has_role? (role, object)
20
- find_role_with_object(role,object).count == 1
21
+ def has_role? (role, object = nil)
22
+ find_role(role,object).count == 1
21
23
  end
22
24
 
23
25
  # subject.has_role!(role, object = nil). Assigns a role for the object to the subject.
@@ -25,8 +27,8 @@ module Mongoid
25
27
  # IMPELEMENTED IN MongoidRoles::Subject
26
28
 
27
29
  # subject.has_no_role!(role, object = nil). Unassigns a role from the subject.
28
- def has_no_role! (role, object)
29
- find_role_with_object(role,object).destroy_all
30
+ def has_no_role! (role, object = nil)
31
+ find_role(role,object).destroy_all
30
32
  end
31
33
 
32
34
  # subject.has_roles_for?(object). Does the subject has any roles for object? (true of false)
@@ -55,6 +57,11 @@ module Mongoid
55
57
  criteria.destroy_all
56
58
  end
57
59
 
60
+
61
+
62
+ # def find_role(role, object = nil)
63
+ # object ? find_role_with_object(role,object) : find_role(role)
64
+ # end
58
65
  end
59
66
 
60
67
  def auth_object
@@ -64,6 +71,8 @@ module Mongoid
64
71
  end
65
72
 
66
73
  def auth_object=(auth_object)
74
+ return unless auth_object
75
+
67
76
  self.auth_object_type = auth_object.class.name
68
77
  self.auth_object_id = auth_object.id
69
78
  end
@@ -34,7 +34,7 @@ module Mongoid
34
34
  # find all subjects which has given role for given object
35
35
  def with_role role, object
36
36
  c = where('roles.auth_object_type' => object.class.name, 'roles.role' => role)
37
- c.selector['roles.auth_object_id'] = object.id.to_s # FIX, bo chcemy string a nie objectid...
37
+ c.selector['roles.auth_object_id'] = object.id.to_s # FIX, we want string instead of object_id...
38
38
  return c
39
39
  end
40
40
 
@@ -42,8 +42,12 @@ module Mongoid
42
42
 
43
43
  # Assigns a role for the object to the subject.
44
44
  # Does nothing is subject already has such a role.
45
- def has_role! (role, object = nil)
46
- roles.find_or_create_by(:role => role, :auth_object => object)
45
+ def has_role! (role, auth_object = nil)
46
+ # p roles.find(:role => role, :auth_object => auth_object).first
47
+ auth_object ?
48
+ roles.find_or_create_by(:role => role, :auth_object_id => auth_object.id.to_s, :auth_object_type => auth_object.class.name) :
49
+ roles.find_or_create_by(:role => role, :auth_object_id => nil, :auth_object_type => nil)
50
+
47
51
  end
48
52
  end
49
53
  end
@@ -1,3 +1,3 @@
1
1
  module MongoidRoles
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -12,11 +12,12 @@ Gem::Specification.new do |s|
12
12
  s.summary = %q{Mongoid Roles}
13
13
  s.description = %q{Mongoid Roles}
14
14
 
15
- s.rubyforge_project = "mongoid_roles"
15
+ s.add_development_dependency 'rspec'
16
+ s.add_development_dependency 'rspec-rails'
17
+ s.add_development_dependency 'mongoid', '2.0.0.rc.7'
16
18
 
17
19
  s.files = `git ls-files`.split("\n")
18
20
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
21
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
22
  s.require_paths = ["lib"]
21
-
22
23
  end
@@ -0,0 +1,6 @@
1
+ class Project
2
+ include Mongoid::Document
3
+ include Mongoid::Roles::Object
4
+
5
+ field :name
6
+ end
@@ -0,0 +1,6 @@
1
+ class User
2
+ include Mongoid::Document
3
+ include Mongoid::Roles::Subject
4
+
5
+ field :name
6
+ end
@@ -0,0 +1,17 @@
1
+ require 'rubygems'
2
+ require 'rails/all'
3
+ require 'mongoid'
4
+ require 'bundler/setup'
5
+
6
+ require 'mongoid_roles'
7
+ require 'models/user'
8
+ require 'models/project'
9
+
10
+ Mongoid.configure do |config|
11
+ host = "localhost"
12
+ config.master = Mongo::Connection.new.db('mongoid_roles_test')
13
+ config.persist_in_safe_mode = false
14
+ end
15
+
16
+ RSpec.configure do |config|
17
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe Mongoid::Roles::Subject do
4
+ before(:each) do
5
+ @bob = User.new
6
+ @proj = Project.new
7
+ end
8
+
9
+ context 'has_role!' do
10
+ it 'should set role' do
11
+ @bob.has_role?(:manager, @proj).should be_false
12
+ @bob.has_role!(:manager, @proj)
13
+ @bob.has_role?(:manager, @proj).should be_true
14
+
15
+ @bob.has_role?(:manager).should be_false
16
+ @bob.has_role!(:manager)
17
+ @bob.has_role?(:manager).should be_true
18
+ end
19
+ end
20
+
21
+ context 'has_no_roles!' do
22
+ it 'should remove all roles' do
23
+ @bob.has_role!(:manager)
24
+ @bob.has_role!(:manager, @proj)
25
+ @bob.roles.count.should == 2
26
+
27
+ @bob.has_no_roles!
28
+ @bob.roles.count.should == 0
29
+ end
30
+ end
31
+
32
+ context 'has_no_role!' do
33
+ it 'should remove particular role' do
34
+ @bob.has_role!(:manager)
35
+ @bob.has_role!(:manager, @proj)
36
+
37
+ @bob.has_role?(:manager).should be_true
38
+ @bob.has_no_role!(:manager)
39
+ @bob.has_role?(:manager).should be_false
40
+
41
+ @bob.has_role?(:manager, @proj).should be_true
42
+ @bob.has_no_role!(:manager, @proj)
43
+ @bob.has_role?(:manager, @proj).should be_false
44
+ end
45
+ end
46
+
47
+ context 'has_roles_for?' do
48
+ it 'should check if role exists for object' do
49
+ @bob.has_roles_for?(@proj).should be_false
50
+ @bob.has_role!(:manager, @proj)
51
+ @bob.has_roles_for?(@proj).should be_true
52
+ end
53
+ end
54
+
55
+ context 'has_role_for?' do
56
+ it 'should do the same as has_roles_for?' do
57
+ @bob.has_roles_for?(@proj).should be_false
58
+ @bob.has_role!(:manager, @proj)
59
+ @bob.has_roles_for?(@proj).should be_true
60
+ end
61
+ end
62
+
63
+ context 'roles_for' do
64
+ it 'should return all roles for object' do
65
+ proj2 = Project.new
66
+
67
+ @bob.has_role!(:manager, @proj)
68
+ @bob.has_role!(:leader, @proj)
69
+ @bob.has_role!(:manager, proj2)
70
+
71
+ @bob.roles_for(@proj).count.should == 2
72
+ end
73
+ end
74
+
75
+ context 'has_no_roles_for!' do
76
+ it 'should remove roles for object' do
77
+ proj2 = Project.new
78
+
79
+ @bob.has_role!(:manager, @proj)
80
+ @bob.has_role!(:leader, @proj)
81
+ @bob.has_role!(:manager, proj2)
82
+
83
+ @bob.has_no_roles_for!(@proj)
84
+
85
+ @bob.roles.count.should == 1
86
+ end
87
+ end
88
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: mongoid_roles
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.3
5
+ version: 0.0.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - Michal Wychowaniec
@@ -10,10 +10,42 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-27 00:00:00 +01:00
13
+ date: 2011-03-21 00:00:00 +01:00
14
14
  default_executable:
15
- dependencies: []
16
-
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rspec
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :development
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec-rails
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :development
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: mongoid
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - "="
45
+ - !ruby/object:Gem::Version
46
+ version: 2.0.0.rc.7
47
+ type: :development
48
+ version_requirements: *id003
17
49
  description: Mongoid Roles
18
50
  email:
19
51
  - michal.wychowaniec@gmail.com
@@ -26,7 +58,7 @@ extra_rdoc_files: []
26
58
  files:
27
59
  - .gitignore
28
60
  - Gemfile
29
- - README.md
61
+ - README.textile
30
62
  - Rakefile
31
63
  - lib/mongoid/roles.rb
32
64
  - lib/mongoid/roles/object.rb
@@ -35,6 +67,10 @@ files:
35
67
  - lib/mongoid/roles/version.rb
36
68
  - lib/mongoid_roles.rb
37
69
  - mongoid_roles.gemspec
70
+ - spec/models/project.rb
71
+ - spec/models/user.rb
72
+ - spec/spec_helper.rb
73
+ - spec/subject_spec.rb
38
74
  has_rdoc: true
39
75
  homepage: ""
40
76
  licenses: []
@@ -58,10 +94,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
58
94
  version: "0"
59
95
  requirements: []
60
96
 
61
- rubyforge_project: mongoid_roles
97
+ rubyforge_project:
62
98
  rubygems_version: 1.5.3
63
99
  signing_key:
64
100
  specification_version: 3
65
101
  summary: Mongoid Roles
66
- test_files: []
67
-
102
+ test_files:
103
+ - spec/models/project.rb
104
+ - spec/models/user.rb
105
+ - spec/spec_helper.rb
106
+ - spec/subject_spec.rb
data/README.md DELETED
@@ -1,4 +0,0 @@
1
- Mongoid Roles
2
- =============
3
-
4
- Roles system for mongoid with interface based on [acl9](https://github.com/be9/acl9).