-
Notifications
You must be signed in to change notification settings - Fork 398
Expand file tree
/
Copy pathmongoid.rb
More file actions
162 lines (131 loc) · 2.92 KB
/
mongoid.rb
File metadata and controls
162 lines (131 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
require 'mongoid'
Mongoid.load!("spec/support/adapters/mongoid.yml", :test)
Mongoid.logger = ::Logger.new('/dev/null')
Mongo::Logger.logger.level = Logger::INFO
::Mongoid::Document.module_eval do
def self.included(base)
base.extend Rolify
end
end
Rolify.use_mongoid
# Standard user and role classes
class User
include Mongoid::Document
rolify
field :login, :type => String
end
# Standard user and role classes
class StrictUser
include Mongoid::Document
rolify strict: true
field :login, :type => String
end
class Role
include Mongoid::Document
has_and_belongs_to_many :users
has_and_belongs_to_many :strict_users
belongs_to :resource, :polymorphic => true
field :name, :type => String
index(
{
:name => 1,
:resource_type => 1,
:resource_id => 1
},
{ :unique => true }
)
scopify
end
# Resourcifed and rolifed at the same time
class HumanResource
include Mongoid::Document
resourcify :resources
rolify
field :login, :type => String
end
#class Power
# include Mongoid::Document
# has_and_belongs_to_many :human_resources
# belongs_to :resource, :polymorphic => true
# scopify
#
# field :name, :type => String
# index(
# {
# :name => 1,
# :resource_type => 1,
# :resource_id => 1
# },
# { :unique => true }
# )
#end
# Custom role and class names
class Customer
include Mongoid::Document
rolify :role_cname => "Privilege"
field :login, :type => String
end
class Privilege
include Mongoid::Document
has_and_belongs_to_many :customers
belongs_to :resource, :polymorphic => true
scopify
field :name, :type => String
index(
{
:name => 1,
:resource_type => 1,
:resource_id => 1
},
{ :unique => true }
)
end
# Namespaced models
module Admin
class Moderator
include Mongoid::Document
rolify :role_cname => "Admin::Right"
field :login, :type => String
end
class Right
include Mongoid::Document
has_and_belongs_to_many :moderators, :class_name => 'Admin::Moderator'
belongs_to :resource, :polymorphic => true
scopify
field :name, :type => String
index(
{
:name => 1,
:resource_type => 1,
:resource_id => 1
},
{ :unique => true }
)
end
end
# Resources classes
class Forum
include Mongoid::Document
#resourcify done during specs setup to be able to use custom user classes
field :name, :type => String
end
class Group
include Mongoid::Document
#resourcify done during specs setup to be able to use custom user classes
field :name, :type => String
field :parent_id, :type => Integer
def subgroups
Group.in(:parent_id => _id)
end
end
class Team
include Mongoid::Document
#resourcify done during specs setup to be able to use custom user classes
field :team_code, :type => Integer
field :name, :type => String
end
class Organization
include Mongoid::Document
end
class Company < Organization
end