third-prestige-rolify 3.3.0.rc5
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/.gitignore +10 -0
- data/.travis.yml +17 -0
- data/CHANGELOG.rdoc +157 -0
- data/Gemfile +21 -0
- data/LICENSE +20 -0
- data/README.md +220 -0
- data/Rakefile +34 -0
- data/UPGRADE.rdoc +44 -0
- data/gemfiles/Gemfile.rails-3.2 +21 -0
- data/gemfiles/Gemfile.rails-4.0 +27 -0
- data/lib/generators/active_record/rolify_generator.rb +50 -0
- data/lib/generators/active_record/templates/README +8 -0
- data/lib/generators/active_record/templates/migration.rb +19 -0
- data/lib/generators/mongoid/rolify_generator.rb +51 -0
- data/lib/generators/mongoid/templates/README-mongoid +4 -0
- data/lib/generators/rolify/rolify_generator.rb +35 -0
- data/lib/generators/rolify/templates/README +13 -0
- data/lib/generators/rolify/templates/initializer.rb +8 -0
- data/lib/generators/rolify/templates/role-active_record.rb +11 -0
- data/lib/generators/rolify/templates/role-mongoid.rb +17 -0
- data/lib/generators/rolify/user_generator.rb +39 -0
- data/lib/rolify.rb +57 -0
- data/lib/rolify/adapters/active_record/resource_adapter.rb +26 -0
- data/lib/rolify/adapters/active_record/role_adapter.rb +86 -0
- data/lib/rolify/adapters/active_record/scopes.rb +27 -0
- data/lib/rolify/adapters/base.rb +60 -0
- data/lib/rolify/adapters/mongoid/resource_adapter.rb +27 -0
- data/lib/rolify/adapters/mongoid/role_adapter.rb +89 -0
- data/lib/rolify/adapters/mongoid/scopes.rb +27 -0
- data/lib/rolify/configure.rb +56 -0
- data/lib/rolify/dynamic.rb +21 -0
- data/lib/rolify/finders.rb +40 -0
- data/lib/rolify/matchers.rb +13 -0
- data/lib/rolify/railtie.rb +20 -0
- data/lib/rolify/resource.rb +31 -0
- data/lib/rolify/role.rb +85 -0
- data/lib/rolify/utils.rb +10 -0
- data/lib/rolify/version.rb +3 -0
- data/rolify.gemspec +30 -0
- data/spec/README.rdoc +24 -0
- data/spec/generators/rolify/rolify_activerecord_generator_spec.rb +163 -0
- data/spec/generators/rolify/rolify_mongoid_generator_spec.rb +112 -0
- data/spec/generators_helper.rb +21 -0
- data/spec/rolify/config_spec.rb +191 -0
- data/spec/rolify/custom_spec.rb +20 -0
- data/spec/rolify/matchers_spec.rb +24 -0
- data/spec/rolify/namespace_spec.rb +24 -0
- data/spec/rolify/resource_spec.rb +389 -0
- data/spec/rolify/resourcifed_and_rolifed_spec.rb +24 -0
- data/spec/rolify/role_spec.rb +20 -0
- data/spec/rolify/shared_contexts.rb +92 -0
- data/spec/rolify/shared_examples/shared_examples_for_add_role.rb +92 -0
- data/spec/rolify/shared_examples/shared_examples_for_callbacks.rb +65 -0
- data/spec/rolify/shared_examples/shared_examples_for_dynamic.rb +151 -0
- data/spec/rolify/shared_examples/shared_examples_for_finders.rb +77 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_all_roles.rb +71 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_any_role.rb +71 -0
- data/spec/rolify/shared_examples/shared_examples_for_has_role.rb +135 -0
- data/spec/rolify/shared_examples/shared_examples_for_only_has_role.rb +174 -0
- data/spec/rolify/shared_examples/shared_examples_for_remove_role.rb +121 -0
- data/spec/rolify/shared_examples/shared_examples_for_roles.rb +102 -0
- data/spec/rolify/shared_examples/shared_examples_for_scopes.rb +38 -0
- data/spec/spec_helper.rb +30 -0
- data/spec/support/adapters/active_record.rb +76 -0
- data/spec/support/adapters/mongoid.rb +143 -0
- data/spec/support/adapters/mongoid.yml +6 -0
- data/spec/support/data.rb +25 -0
- data/spec/support/schema.rb +52 -0
- metadata +254 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
shared_examples_for "#remove_role_examples" do |param_name, param_method|
|
2
|
+
context "using #{param_name} as parameter" do
|
3
|
+
context "removing a global role", :scope => :global do
|
4
|
+
context "being a global role of the user" do
|
5
|
+
it { expect { subject.remove_role("admin".send(param_method)) }.to change { subject.roles.size }.by(-1) }
|
6
|
+
|
7
|
+
it { should_not have_role("admin".send(param_method)) }
|
8
|
+
it { should have_role("staff".send(param_method)) }
|
9
|
+
it { should have_role("manager".send(param_method), Group) }
|
10
|
+
it { should have_role("moderator".send(param_method), Forum.last) }
|
11
|
+
it { should have_role("moderator".send(param_method), Group.last) }
|
12
|
+
it { should have_role("anonymous".send(param_method), Forum.first) }
|
13
|
+
end
|
14
|
+
|
15
|
+
context "being a class scoped role to the user" do
|
16
|
+
it { expect { subject.remove_role("manager".send(param_method)) }.to change { subject.roles.size }.by(-1) }
|
17
|
+
|
18
|
+
it { should_not have_role("admin".send(param_method)) }
|
19
|
+
it { should have_role("staff".send(param_method)) }
|
20
|
+
it { should_not have_role("manager".send(param_method), Group) }
|
21
|
+
it { should have_role("moderator".send(param_method), Forum.last) }
|
22
|
+
it { should have_role("moderator".send(param_method), Group.last) }
|
23
|
+
it { should have_role("anonymous".send(param_method), Forum.first) }
|
24
|
+
end
|
25
|
+
|
26
|
+
context "being instance scoped roles to the user" do
|
27
|
+
it { expect { subject.remove_role("moderator".send(param_method)) }.to change { subject.roles.size }.by(-2) }
|
28
|
+
|
29
|
+
it { should_not have_role("admin".send(param_method)) }
|
30
|
+
it { should have_role("staff".send(param_method)) }
|
31
|
+
it { should_not have_role("manager".send(param_method), Group) }
|
32
|
+
it { should_not have_role("moderator".send(param_method), Forum.last) }
|
33
|
+
it { should_not have_role("moderator".send(param_method), Group.last) }
|
34
|
+
it { should have_role("anonymous".send(param_method), Forum.first) }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "not being a role of the user" do
|
38
|
+
it { expect { subject.remove_role("superhero".send(param_method)) }.not_to change { subject.roles.size } }
|
39
|
+
end
|
40
|
+
|
41
|
+
context "used by another user" do
|
42
|
+
before do
|
43
|
+
user = user_class.last
|
44
|
+
user.add_role "staff".send(param_method)
|
45
|
+
end
|
46
|
+
|
47
|
+
it { expect { subject.remove_role("staff".send(param_method)) }.not_to change { role_class.count } }
|
48
|
+
|
49
|
+
it { should_not have_role("admin".send(param_method)) }
|
50
|
+
it { should_not have_role("staff".send(param_method)) }
|
51
|
+
it { should_not have_role("manager".send(param_method), Group) }
|
52
|
+
it { should_not have_role("moderator".send(param_method), Forum.last) }
|
53
|
+
it { should_not have_role("moderator".send(param_method), Group.last) }
|
54
|
+
it { should have_role("anonymous".send(param_method), Forum.first) }
|
55
|
+
end
|
56
|
+
|
57
|
+
context "not used by anyone else" do
|
58
|
+
before do
|
59
|
+
subject.add_role "nobody".send(param_method)
|
60
|
+
end
|
61
|
+
|
62
|
+
it { expect { subject.remove_role("nobody".send(param_method)) }.to change { role_class.count }.by(-1) }
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
context "removing a class scoped role", :scope => :class do
|
67
|
+
context "being a global role of the user" do
|
68
|
+
it { expect { subject.remove_role("warrior".send(param_method), Forum) }.not_to change{ subject.roles.size } }
|
69
|
+
end
|
70
|
+
|
71
|
+
context "being a class scoped role to the user" do
|
72
|
+
it { expect { subject.remove_role("manager".send(param_method), Forum) }.to change{ subject.roles.size }.by(-1) }
|
73
|
+
|
74
|
+
it { should have_role("warrior") }
|
75
|
+
it { should_not have_role("manager", Forum) }
|
76
|
+
it { should have_role("player", Forum) }
|
77
|
+
it { should have_role("moderator".send(param_method), Forum.last) }
|
78
|
+
it { should have_role("moderator".send(param_method), Group.last) }
|
79
|
+
it { should have_role("anonymous".send(param_method), Forum.first) }
|
80
|
+
end
|
81
|
+
|
82
|
+
context "being instance scoped role to the user" do
|
83
|
+
it { expect { subject.remove_role("moderator".send(param_method), Forum) }.to change { subject.roles.size }.by(-1) }
|
84
|
+
|
85
|
+
it { should have_role("warrior") }
|
86
|
+
it { should_not have_role("manager", Forum) }
|
87
|
+
it { should have_role("player", Forum) }
|
88
|
+
it { should_not have_role("moderator".send(param_method), Forum.last) }
|
89
|
+
it { should have_role("moderator".send(param_method), Group.last) }
|
90
|
+
it { should have_role("anonymous".send(param_method), Forum.first) }
|
91
|
+
end
|
92
|
+
|
93
|
+
context "not being a role of the user" do
|
94
|
+
it { expect { subject.remove_role("manager".send(param_method), Group) }.not_to change { subject.roles.size } }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context "removing a instance scoped role", :scope => :instance do
|
99
|
+
context "being a global role of the user" do
|
100
|
+
it { expect { subject.remove_role("soldier".send(param_method), Group.first) }.not_to change { subject.roles.size } }
|
101
|
+
end
|
102
|
+
|
103
|
+
context "being a class scoped role to the user" do
|
104
|
+
it { expect { subject.remove_role("visitor".send(param_method), Forum.first) }.not_to change { subject.roles.size } }
|
105
|
+
end
|
106
|
+
|
107
|
+
context "being instance scoped role to the user" do
|
108
|
+
it { expect { subject.remove_role("moderator".send(param_method), Forum.first) }.to change { subject.roles.size }.by(-1) }
|
109
|
+
|
110
|
+
it { should have_role("soldier") }
|
111
|
+
it { should have_role("visitor", Forum) }
|
112
|
+
it { should_not have_role("moderator", Forum.first) }
|
113
|
+
it { should have_role("anonymous", Forum.last) }
|
114
|
+
end
|
115
|
+
|
116
|
+
context "not being a role of the user" do
|
117
|
+
it { expect { subject.remove_role("anonymous".send(param_method), Forum.first) }.not_to change { subject.roles.size } }
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require "rolify/shared_contexts"
|
2
|
+
require "rolify/shared_examples/shared_examples_for_add_role"
|
3
|
+
require "rolify/shared_examples/shared_examples_for_has_role"
|
4
|
+
require "rolify/shared_examples/shared_examples_for_only_has_role"
|
5
|
+
require "rolify/shared_examples/shared_examples_for_has_all_roles"
|
6
|
+
require "rolify/shared_examples/shared_examples_for_has_any_role"
|
7
|
+
require "rolify/shared_examples/shared_examples_for_remove_role"
|
8
|
+
require "rolify/shared_examples/shared_examples_for_finders"
|
9
|
+
|
10
|
+
shared_examples_for Rolify::Role do
|
11
|
+
before(:all) do
|
12
|
+
reset_defaults
|
13
|
+
Rolify.dynamic_shortcuts = false
|
14
|
+
rolify_options = { :role_cname => role_class.to_s }
|
15
|
+
rolify_options[:role_join_table_name] = join_table if defined? join_table
|
16
|
+
user_class.rolify rolify_options
|
17
|
+
role_class.destroy_all
|
18
|
+
Forum.resourcify :roles, :role_cname => role_class.to_s
|
19
|
+
Group.resourcify :roles, :role_cname => role_class.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
context "in the Instance level" do
|
23
|
+
before(:all) do
|
24
|
+
admin = user_class.first
|
25
|
+
admin.add_role :admin
|
26
|
+
admin.add_role :moderator, Forum.first
|
27
|
+
end
|
28
|
+
|
29
|
+
subject { user_class.first }
|
30
|
+
|
31
|
+
[ :has_role, :grant, :add_role ].each do |method_alias|
|
32
|
+
it { should respond_to(method_alias.to_sym).with(1).arguments }
|
33
|
+
it { should respond_to(method_alias.to_sym).with(2).arguments }
|
34
|
+
end
|
35
|
+
|
36
|
+
it { should respond_to(:has_role?).with(1).arguments }
|
37
|
+
it { should respond_to(:has_role?).with(2).arguments }
|
38
|
+
|
39
|
+
it { should respond_to(:has_all_roles?) }
|
40
|
+
it { should respond_to(:has_all_roles?) }
|
41
|
+
|
42
|
+
it { should respond_to(:has_any_role?) }
|
43
|
+
it { should respond_to(:has_any_role?) }
|
44
|
+
|
45
|
+
[ :has_no_role, :revoke, :remove_role ].each do |method_alias|
|
46
|
+
it { should respond_to(method_alias.to_sym).with(1).arguments }
|
47
|
+
it { should respond_to(method_alias.to_sym).with(2).arguments }
|
48
|
+
end
|
49
|
+
|
50
|
+
it { should_not respond_to(:is_admin?) }
|
51
|
+
it { should_not respond_to(:is_moderator_of?) }
|
52
|
+
|
53
|
+
describe "#has_role" do
|
54
|
+
it_should_behave_like "#add_role_examples", "String", :to_s
|
55
|
+
it_should_behave_like "#add_role_examples", "Symbol", :to_sym
|
56
|
+
end
|
57
|
+
|
58
|
+
describe "#has_role?" do
|
59
|
+
it_should_behave_like "#has_role?_examples", "String", :to_s
|
60
|
+
it_should_behave_like "#has_role?_examples", "Symbol", :to_sym
|
61
|
+
end
|
62
|
+
|
63
|
+
describe "#only_has_role?" do
|
64
|
+
it_should_behave_like "#only_has_role?_examples", "String", :to_s
|
65
|
+
it_should_behave_like "#only_has_role?_examples", "Symbol", :to_sym
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "#has_all_roles?" do
|
69
|
+
it_should_behave_like "#has_all_roles?_examples", "String", :to_s
|
70
|
+
it_should_behave_like "#has_all_roles?_examples", "Symbol", :to_sym
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#has_any_role?" do
|
74
|
+
it_should_behave_like "#has_any_role?_examples", "String", :to_s
|
75
|
+
it_should_behave_like "#has_any_role?_examples", "Symbol", :to_sym
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "#has_no_role" do
|
79
|
+
it_should_behave_like "#remove_role_examples", "String", :to_s
|
80
|
+
it_should_behave_like "#remove_role_examples", "Symbol", :to_sym
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
context "with a new instance" do
|
85
|
+
let(:user) { user_class.new }
|
86
|
+
|
87
|
+
before do
|
88
|
+
user.add_role :admin
|
89
|
+
user.add_role :moderator, Forum.first
|
90
|
+
end
|
91
|
+
|
92
|
+
subject { user }
|
93
|
+
|
94
|
+
it { should have_role :admin }
|
95
|
+
it { should have_role :moderator, Forum.first }
|
96
|
+
end
|
97
|
+
|
98
|
+
context "on the Class level ", :scope => :mixed do
|
99
|
+
it_should_behave_like :finders, "String", :to_s
|
100
|
+
it_should_behave_like :finders, "Symbol", :to_sym
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require "rolify/shared_contexts"
|
2
|
+
|
3
|
+
shared_examples_for "Role.scopes" do
|
4
|
+
before do
|
5
|
+
role_class.destroy_all
|
6
|
+
end
|
7
|
+
|
8
|
+
subject { user_class.first }
|
9
|
+
|
10
|
+
describe ".global" do
|
11
|
+
let!(:admin_role) { subject.add_role :admin }
|
12
|
+
let!(:staff_role) { subject.add_role :staff }
|
13
|
+
|
14
|
+
it { subject.roles.global.should == [ admin_role, staff_role ] }
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ".class_scoped" do
|
18
|
+
let!(:manager_role) { subject.add_role :manager, Group }
|
19
|
+
let!(:moderator_role) { subject.add_role :moderator, Forum }
|
20
|
+
|
21
|
+
it { subject.roles.class_scoped.should =~ [ manager_role, moderator_role ] }
|
22
|
+
it { subject.roles.class_scoped(Group).should =~ [ manager_role ] }
|
23
|
+
it { subject.roles.class_scoped(Forum).should =~ [ moderator_role ] }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe ".instance_scoped" do
|
27
|
+
let!(:visitor_role) { subject.add_role :visitor, Forum.first }
|
28
|
+
let!(:zombie_role) { subject.add_role :visitor, Forum.last }
|
29
|
+
let!(:anonymous_role) { subject.add_role :anonymous, Group.last }
|
30
|
+
|
31
|
+
it { subject.roles.instance_scoped.to_a.entries.should =~ [ visitor_role, zombie_role, anonymous_role ] }
|
32
|
+
it { subject.roles.instance_scoped(Forum).should =~ [ visitor_role, zombie_role ] }
|
33
|
+
it { subject.roles.instance_scoped(Forum.first).should =~ [ visitor_role ] }
|
34
|
+
it { subject.roles.instance_scoped(Forum.last).should =~ [ zombie_role ] }
|
35
|
+
it { subject.roles.instance_scoped(Group.last).should =~ [ anonymous_role ] }
|
36
|
+
it { subject.roles.instance_scoped(Group.first).should be_empty }
|
37
|
+
end
|
38
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require "bundler/setup"
|
3
|
+
|
4
|
+
require 'rolify'
|
5
|
+
require 'rolify/matchers'
|
6
|
+
require 'rails/all'
|
7
|
+
|
8
|
+
require 'coveralls'
|
9
|
+
Coveralls.wear_merged!
|
10
|
+
|
11
|
+
ENV['ADAPTER'] ||= 'active_record'
|
12
|
+
|
13
|
+
load File.dirname(__FILE__) + "/support/adapters/#{ENV['ADAPTER']}.rb"
|
14
|
+
load File.dirname(__FILE__) + '/support/data.rb'
|
15
|
+
|
16
|
+
def reset_defaults
|
17
|
+
Rolify.use_defaults
|
18
|
+
Rolify.use_mongoid if ENV['ADAPTER'] == "mongoid"
|
19
|
+
end
|
20
|
+
|
21
|
+
def provision_user(user, roles)
|
22
|
+
roles.each do |role|
|
23
|
+
if role.is_a? Array
|
24
|
+
user.add_role *role
|
25
|
+
else
|
26
|
+
user.add_role role
|
27
|
+
end
|
28
|
+
end
|
29
|
+
user
|
30
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
RSpec::Matchers::OperatorMatcher.register(ActiveRecord::Relation, '=~', RSpec::Matchers::BuiltIn::MatchArray)
|
4
|
+
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
|
5
|
+
ActiveRecord::Base.extend Rolify
|
6
|
+
|
7
|
+
load File.dirname(__FILE__) + '/../schema.rb'
|
8
|
+
|
9
|
+
# Standard user and role classes
|
10
|
+
class User < ActiveRecord::Base
|
11
|
+
rolify
|
12
|
+
end
|
13
|
+
|
14
|
+
class Role < ActiveRecord::Base
|
15
|
+
has_and_belongs_to_many :users, :join_table => :users_roles
|
16
|
+
belongs_to :resource, :polymorphic => true
|
17
|
+
|
18
|
+
extend Rolify::Adapter::Scopes
|
19
|
+
end
|
20
|
+
|
21
|
+
# Resourcifed and rolifed at the same time
|
22
|
+
class HumanResource < ActiveRecord::Base
|
23
|
+
resourcify :resources
|
24
|
+
rolify
|
25
|
+
end
|
26
|
+
|
27
|
+
# Custom role and class names
|
28
|
+
class Customer < ActiveRecord::Base
|
29
|
+
rolify :role_cname => "Privilege"
|
30
|
+
end
|
31
|
+
|
32
|
+
class Privilege < ActiveRecord::Base
|
33
|
+
has_and_belongs_to_many :customers, :join_table => :customers_privileges
|
34
|
+
belongs_to :resource, :polymorphic => true
|
35
|
+
|
36
|
+
extend Rolify::Adapter::Scopes
|
37
|
+
end
|
38
|
+
|
39
|
+
# Namespaced models
|
40
|
+
module Admin
|
41
|
+
def self.table_name_prefix
|
42
|
+
'admin_'
|
43
|
+
end
|
44
|
+
|
45
|
+
class Moderator < ActiveRecord::Base
|
46
|
+
rolify :role_cname => "Admin::Right", :role_join_table_name => "moderators_rights"
|
47
|
+
end
|
48
|
+
|
49
|
+
class Right < ActiveRecord::Base
|
50
|
+
has_and_belongs_to_many :moderators, :class_name => "Admin::Moderator", :join_table => "moderators_rights"
|
51
|
+
belongs_to :resource, :polymorphic => true
|
52
|
+
|
53
|
+
extend Rolify::Adapter::Scopes
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
# Resources classes
|
59
|
+
class Forum < ActiveRecord::Base
|
60
|
+
#resourcify done during specs setup to be able to use custom user classes
|
61
|
+
end
|
62
|
+
|
63
|
+
class Group < ActiveRecord::Base
|
64
|
+
#resourcify done during specs setup to be able to use custom user classes
|
65
|
+
|
66
|
+
def subgroups
|
67
|
+
Group.where(:parent_id => id)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Team < ActiveRecord::Base
|
72
|
+
#resourcify done during specs setup to be able to use custom user classes
|
73
|
+
self.primary_key = "team_code"
|
74
|
+
|
75
|
+
default_scope { order(:team_code) }
|
76
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'mongoid'
|
2
|
+
|
3
|
+
Mongoid.load!("spec/support/adapters/mongoid.yml", :test)
|
4
|
+
|
5
|
+
::Mongoid::Document.module_eval do
|
6
|
+
def self.included(base)
|
7
|
+
base.extend Rolify
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Rolify.use_mongoid
|
12
|
+
|
13
|
+
# Standard user and role classes
|
14
|
+
class User
|
15
|
+
include Mongoid::Document
|
16
|
+
rolify
|
17
|
+
|
18
|
+
field :login, :type => String
|
19
|
+
end
|
20
|
+
|
21
|
+
class Role
|
22
|
+
include Mongoid::Document
|
23
|
+
has_and_belongs_to_many :users
|
24
|
+
belongs_to :resource, :polymorphic => true
|
25
|
+
|
26
|
+
field :name, :type => String
|
27
|
+
index(
|
28
|
+
{
|
29
|
+
:name => 1,
|
30
|
+
:resource_type => 1,
|
31
|
+
:resource_id => 1
|
32
|
+
},
|
33
|
+
{ :unique => true }
|
34
|
+
)
|
35
|
+
|
36
|
+
scopify
|
37
|
+
end
|
38
|
+
|
39
|
+
# Resourcifed and rolifed at the same time
|
40
|
+
class HumanResource
|
41
|
+
include Mongoid::Document
|
42
|
+
resourcify :resources
|
43
|
+
rolify
|
44
|
+
|
45
|
+
field :login, :type => String
|
46
|
+
end
|
47
|
+
|
48
|
+
#class Power
|
49
|
+
# include Mongoid::Document
|
50
|
+
# has_and_belongs_to_many :human_resources
|
51
|
+
# belongs_to :resource, :polymorphic => true
|
52
|
+
# scopify
|
53
|
+
#
|
54
|
+
# field :name, :type => String
|
55
|
+
# index(
|
56
|
+
# {
|
57
|
+
# :name => 1,
|
58
|
+
# :resource_type => 1,
|
59
|
+
# :resource_id => 1
|
60
|
+
# },
|
61
|
+
# { :unique => true }
|
62
|
+
# )
|
63
|
+
#end
|
64
|
+
|
65
|
+
# Custom role and class names
|
66
|
+
class Customer
|
67
|
+
include Mongoid::Document
|
68
|
+
rolify :role_cname => "Privilege"
|
69
|
+
|
70
|
+
field :login, :type => String
|
71
|
+
end
|
72
|
+
|
73
|
+
class Privilege
|
74
|
+
include Mongoid::Document
|
75
|
+
has_and_belongs_to_many :customers
|
76
|
+
belongs_to :resource, :polymorphic => true
|
77
|
+
scopify
|
78
|
+
|
79
|
+
field :name, :type => String
|
80
|
+
index(
|
81
|
+
{
|
82
|
+
:name => 1,
|
83
|
+
:resource_type => 1,
|
84
|
+
:resource_id => 1
|
85
|
+
},
|
86
|
+
{ :unique => true }
|
87
|
+
)
|
88
|
+
end
|
89
|
+
|
90
|
+
# Namespaced models
|
91
|
+
module Admin
|
92
|
+
class Moderator
|
93
|
+
include Mongoid::Document
|
94
|
+
rolify :role_cname => "Admin::Right"
|
95
|
+
|
96
|
+
field :login, :type => String
|
97
|
+
end
|
98
|
+
|
99
|
+
class Right
|
100
|
+
include Mongoid::Document
|
101
|
+
has_and_belongs_to_many :moderators, :class_name => 'Admin::Moderator'
|
102
|
+
belongs_to :resource, :polymorphic => true
|
103
|
+
scopify
|
104
|
+
|
105
|
+
field :name, :type => String
|
106
|
+
index(
|
107
|
+
{
|
108
|
+
:name => 1,
|
109
|
+
:resource_type => 1,
|
110
|
+
:resource_id => 1
|
111
|
+
},
|
112
|
+
{ :unique => true }
|
113
|
+
)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
# Resources classes
|
118
|
+
class Forum
|
119
|
+
include Mongoid::Document
|
120
|
+
#resourcify done during specs setup to be able to use custom user classes
|
121
|
+
|
122
|
+
field :name, :type => String
|
123
|
+
end
|
124
|
+
|
125
|
+
class Group
|
126
|
+
include Mongoid::Document
|
127
|
+
#resourcify done during specs setup to be able to use custom user classes
|
128
|
+
|
129
|
+
field :name, :type => String
|
130
|
+
field :parent_id, :type => Integer
|
131
|
+
|
132
|
+
def subgroups
|
133
|
+
Group.in(:parent_id => _id)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
class Team
|
138
|
+
include Mongoid::Document
|
139
|
+
#resourcify done during specs setup to be able to use custom user classes
|
140
|
+
|
141
|
+
field :team_code, :type => Integer
|
142
|
+
field :name, :type => String
|
143
|
+
end
|