roles_active_record 0.4.0 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.textile +11 -2
- data/VERSION +1 -1
- data/lib/generators/active_record/roles/roles_generator.rb +1 -2
- data/lib/roles_active_record/base.rb +39 -27
- data/lib/roles_active_record/role.rb +1 -1
- data/lib/roles_active_record/strategy/multi.rb +1 -0
- data/lib/roles_active_record/strategy/multi/many_roles.rb +0 -2
- data/lib/roles_active_record/strategy/multi/roles_mask.rb +6 -2
- data/lib/roles_active_record/strategy/shared.rb +2 -8
- data/lib/roles_active_record/strategy/single/one_role.rb +8 -2
- data/roles_active_record.gemspec +2 -13
- data/spec/roles_active_record/strategy/api_examples.rb +188 -188
- data/spec/roles_active_record/strategy/multi/many_roles_spec.rb +0 -1
- data/spec/roles_active_record/strategy/multi/many_roles_unique_spec.rb +0 -1
- data/spec/roles_active_record/strategy/multi/roles_mask_spec.rb +2 -3
- data/spec/roles_active_record/strategy/single/admin_flag_spec.rb +0 -1
- data/spec/roles_active_record/strategy/single/one_role_spec.rb +0 -2
- data/spec/roles_active_record/strategy/single/one_role_unique_spec.rb +0 -1
- data/spec/roles_active_record/strategy/user_setup.rb +1 -6
- metadata +3 -14
- data/sandbox/Rakefile +0 -16
- data/sandbox/add_role_to_users_migration.erb +0 -13
- data/sandbox/create_roles_migration.erb +0 -12
- data/sandbox/create_user_roles_migration.erb +0 -13
- data/sandbox/database.log +0 -47
- data/sandbox/database.yml +0 -4
- data/sandbox/development.sqlite3 +0 -0
- data/sandbox/migrate/201002508_create_roles.rb +0 -11
- data/sandbox/migrate/20102507_create_users.rb +0 -11
- data/sandbox/model_base.rb +0 -46
- data/sandbox/test.rb +0 -13
data/README.textile
CHANGED
@@ -62,11 +62,20 @@ For strategies that use a separate Role model you must call the class method #ro
|
|
62
62
|
|
63
63
|
strategy :one_role, :role_class => :rolle
|
64
64
|
valid_roles_are :admin, :guest
|
65
|
-
...
|
66
65
|
end
|
67
66
|
</pre>
|
68
67
|
|
69
|
-
|
68
|
+
h3. Strategy: many_roles
|
69
|
+
|
70
|
+
Both the Role class and join class between User and Role can be customized using options
|
71
|
+
|
72
|
+
<pre>class Bruger < ActiveRecord::Base
|
73
|
+
include Roles::ActiveRecord
|
74
|
+
|
75
|
+
strategy :one_role, :role_class => :rolle, :user_role_class => :bruger_rolle
|
76
|
+
valid_roles_are :admin, :guest
|
77
|
+
end
|
78
|
+
</pre>
|
70
79
|
|
71
80
|
h3. Default Role classes
|
72
81
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.1
|
@@ -113,9 +113,8 @@ module ActiveRecord
|
|
113
113
|
|
114
114
|
def strategy_options
|
115
115
|
if role_class != 'Role' || user_role_class != 'UserRole' && role_ref_strategy?
|
116
|
-
return ":role_class =>
|
116
|
+
return ":role_class => :#{options[:role_class] || 'role'}, :user_role_class => :#{options[:user_role_class] || 'user_role'}"
|
117
117
|
end
|
118
|
-
":default"
|
119
118
|
end
|
120
119
|
|
121
120
|
def insertion_text
|
@@ -12,56 +12,68 @@ module Roles::ActiveRecord
|
|
12
12
|
end
|
13
13
|
|
14
14
|
module ClassMethods
|
15
|
-
MAP = {
|
16
|
-
:admin_flag => "attr_accessor :admin_flag",
|
17
15
|
|
18
|
-
|
19
|
-
:
|
16
|
+
def valid_single_strategies
|
17
|
+
[:admin_flag, :one_role, :role_string]
|
18
|
+
end
|
19
|
+
|
20
|
+
def valid_multi_strategies
|
21
|
+
[:many_roles, :roles_mask, :role_strings]
|
22
|
+
end
|
20
23
|
|
21
|
-
|
22
|
-
:
|
24
|
+
def strategies_with_role_class
|
25
|
+
[:one_role, :many_roles]
|
26
|
+
end
|
23
27
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
:roles_string => "attr_accessor :roles_string"
|
28
|
-
}
|
28
|
+
def valid_strategies
|
29
|
+
valid_single_strategies + valid_multi_strategies
|
30
|
+
end
|
29
31
|
|
30
32
|
def strategy name, options = {}
|
31
33
|
strategy_name = name.to_sym
|
32
|
-
raise ArgumentError, "Unknown role strategy #{strategy_name}" if !
|
34
|
+
raise ArgumentError, "Unknown role strategy #{strategy_name}" if !valid_strategies.include? strategy_name
|
33
35
|
use_roles_strategy strategy_name
|
34
36
|
|
35
|
-
if
|
36
|
-
@role_class_name = get_role_class(strategy_name, options)
|
37
|
-
else
|
38
|
-
@role_class_name = default_role_class(strategy_name) if strategies_with_role_class.include? strategy_name
|
39
|
-
end
|
40
|
-
|
41
|
-
if (options == :default || options[:config] == :default) && MAP[name]
|
42
|
-
instance_eval statement(MAP[strategy_name])
|
43
|
-
end
|
37
|
+
set_role_class(strategy_name, options) if strategies_with_role_class.include? strategy_name
|
44
38
|
|
39
|
+
# one_role reference
|
40
|
+
if strategy_name == :one_role
|
41
|
+
puts "setup one_role"
|
42
|
+
instance_eval "belongs_to :one_role, :class_name => '#{@role_class_name}'"
|
43
|
+
end
|
44
|
+
|
45
|
+
# many_roles references
|
46
|
+
if strategy_name == :many_roles
|
47
|
+
user_roles_class = options[:user_roles_class] if options.kind_of? Hash
|
48
|
+
user_roles_class ||= 'user_roles'
|
49
|
+
|
50
|
+
instance_eval %{
|
51
|
+
has_many :many_roles, :through => :#{user_roles_class}, :source => :#{@role_class_name.to_s.underscore}
|
52
|
+
has_many :#{user_roles_class}
|
53
|
+
}
|
54
|
+
end
|
55
|
+
|
45
56
|
set_role_strategy name, options
|
46
57
|
end
|
47
58
|
|
48
59
|
private
|
49
60
|
|
61
|
+
def set_role_class strategy_name, options = {}
|
62
|
+
@role_class_name = !options.kind_of?(Symbol) ? get_role_class(strategy_name, options) : default_role_class(strategy_name)
|
63
|
+
end
|
64
|
+
|
50
65
|
def statement code_str
|
51
66
|
code_str.gsub /Role/, @role_class_name.to_s
|
52
67
|
end
|
53
68
|
|
54
69
|
def default_role_class strategy_name
|
55
|
-
if defined? ::Role
|
70
|
+
if defined? ::Role
|
71
|
+
puts "require one_role"
|
56
72
|
require "roles_active_record/#{strategy_name}"
|
57
73
|
return ::Role
|
58
74
|
end
|
59
|
-
raise
|
75
|
+
raise "Default Role class not defined"
|
60
76
|
end
|
61
|
-
|
62
|
-
def strategies_with_role_class
|
63
|
-
[:one_role, :embed_one_role, :many_roles,:embed_many_roles]
|
64
|
-
end
|
65
77
|
|
66
78
|
def get_role_class strategy_name, options
|
67
79
|
options[:role_class] ? options[:role_class].to_s.camelize.constantize : default_role_class(strategy_name)
|
@@ -9,8 +9,6 @@ module RoleStrategy::ActiveRecord
|
|
9
9
|
def self.included base
|
10
10
|
base.extend Roles::Generic::Role::ClassMethods
|
11
11
|
base.extend ClassMethods
|
12
|
-
base.has_many :many_roles, :through => :user_roles, :source => :role
|
13
|
-
base.has_many :user_roles
|
14
12
|
end
|
15
13
|
|
16
14
|
module ClassMethods
|
@@ -18,7 +18,9 @@ module RoleStrategy::ActiveRecord
|
|
18
18
|
def in_role(role)
|
19
19
|
mask = calc_index(role.to_s)
|
20
20
|
all.select do |user|
|
21
|
-
|
21
|
+
v = user.send(role_attribute) || 0
|
22
|
+
value = (v & mask)
|
23
|
+
value && value > 0
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|
@@ -26,7 +28,9 @@ module RoleStrategy::ActiveRecord
|
|
26
28
|
all.select do |user|
|
27
29
|
roles.flatten.any? do |role|
|
28
30
|
mask = calc_index(role.to_s)
|
29
|
-
|
31
|
+
v = user.send(role_attribute) || 0
|
32
|
+
value = (v & mask)
|
33
|
+
value && value > 0
|
30
34
|
end
|
31
35
|
end
|
32
36
|
end
|
@@ -2,20 +2,14 @@ module Roles::ActiveRecord
|
|
2
2
|
module Strategy
|
3
3
|
module Shared
|
4
4
|
def set_role role
|
5
|
-
|
6
|
-
# self.send("#{role_attribute}=", vr)
|
7
|
-
update_attributes(role_attribute => vr)
|
5
|
+
update_attributes(role_attribute => new_role(role))
|
8
6
|
end
|
9
7
|
alias_method :set_roles, :set_role
|
10
8
|
|
11
9
|
def get_role
|
12
10
|
r = self.send(role_attribute)
|
13
|
-
# respond_to?(:present_role) ? present_role(r) : r
|
14
|
-
end
|
15
|
-
|
16
|
-
def get_roles
|
17
|
-
r = self.send(role_attribute)
|
18
11
|
end
|
12
|
+
alias_method :get_roles, :get_role
|
19
13
|
|
20
14
|
def select_valid_roles *roles
|
21
15
|
roles.flat_uniq.select{|role| valid_role? role }
|
@@ -9,7 +9,6 @@ module RoleStrategy::ActiveRecord
|
|
9
9
|
def self.included base
|
10
10
|
base.extend Roles::Generic::Role::ClassMethods
|
11
11
|
base.extend ClassMethods
|
12
|
-
# base.belongs_to :one_role, :foreign_key => :role_id, :class_name => 'Role'
|
13
12
|
end
|
14
13
|
|
15
14
|
module ClassMethods
|
@@ -18,13 +17,20 @@ module RoleStrategy::ActiveRecord
|
|
18
17
|
end
|
19
18
|
|
20
19
|
def in_any_role(*role_names)
|
21
|
-
|
20
|
+
matching_roles = Role.named(role_names)
|
21
|
+
User.where(:role_id => matching_roles.map(&:id))
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
25
|
module Implementation
|
26
26
|
include Roles::ActiveRecord::Strategy::Single
|
27
27
|
|
28
|
+
def set_role role
|
29
|
+
role = role.first if role.kind_of? Array
|
30
|
+
role.users << self
|
31
|
+
end
|
32
|
+
alias_method :set_roles, :set_role
|
33
|
+
|
28
34
|
def new_role role
|
29
35
|
role_class.find_role(extract_role role)
|
30
36
|
end
|
data/roles_active_record.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{roles_active_record}
|
8
|
-
s.version = "0.4.
|
8
|
+
s.version = "0.4.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kristian Mandrup"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-26}
|
13
13
|
s.description = %q{Makes it easy to set a role strategy on your User model in Active Record}
|
14
14
|
s.email = %q{kmandrup@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -54,17 +54,6 @@ Gem::Specification.new do |s|
|
|
54
54
|
"lib/views/_multi_role_selector.erb.html",
|
55
55
|
"lib/views/_single_role_selector.erb.html",
|
56
56
|
"roles_active_record.gemspec",
|
57
|
-
"sandbox/Rakefile",
|
58
|
-
"sandbox/add_role_to_users_migration.erb",
|
59
|
-
"sandbox/create_roles_migration.erb",
|
60
|
-
"sandbox/create_user_roles_migration.erb",
|
61
|
-
"sandbox/database.log",
|
62
|
-
"sandbox/database.yml",
|
63
|
-
"sandbox/development.sqlite3",
|
64
|
-
"sandbox/migrate/201002508_create_roles.rb",
|
65
|
-
"sandbox/migrate/20102507_create_users.rb",
|
66
|
-
"sandbox/model_base.rb",
|
67
|
-
"sandbox/test.rb",
|
68
57
|
"spec/db/database.yml",
|
69
58
|
"spec/fixtures/many_roles_setup.rb",
|
70
59
|
"spec/fixtures/many_roles_setup_unique_check.rb",
|
@@ -22,192 +22,192 @@ describe "Roles for Active Record: #{api_name}" do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
describe '#in_any_role' do
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
it "should be true that a User that includes Roles::Generic has a complete Roles::Generic interface" do
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
describe '#valid_role?' do
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
describe '#valid_roles' do
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
describe '#valid_roles?' do
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
end
|
80
|
-
|
81
|
-
describe '#has_role?' do
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
end
|
93
|
-
|
94
|
-
describe '#has?' do
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
describe '#has_roles?' do
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
end
|
113
|
-
|
114
|
-
describe '#roles_list' do
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
describe '#roles' do
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
end
|
151
|
-
|
152
|
-
describe '#admin?' do
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
end
|
161
|
-
|
162
|
-
describe '#is?' do
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
end
|
171
|
-
|
172
|
-
describe '#roles=' do
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
end
|
179
|
-
|
180
|
-
describe '#exchange_roles' do
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
end
|
199
|
-
|
200
|
-
describe '#remove_roles' do
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
end
|
25
|
+
# describe '#in_any_role' do
|
26
|
+
# it "should return first user matching role" do
|
27
|
+
# if User.respond_to? :in_roles
|
28
|
+
# User.in_any_role(:guest, :user).first.name.should == 'Guest user'
|
29
|
+
# User.in_any_role(:admin, :guest).should be_empty
|
30
|
+
# end
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
|
34
|
+
# it "should be true that a User that includes Roles::Generic has a complete Roles::Generic interface" do
|
35
|
+
# # mutation API
|
36
|
+
# [:roles=, :role=, :add_roles, :add_role, :remove_role, :remove_roles, :exchange_roles, :exchange_role].each do |api_method|
|
37
|
+
# @admin_user.respond_to?(api_method).should be_true
|
38
|
+
# end
|
39
|
+
#
|
40
|
+
# # inspection API
|
41
|
+
# [:valid_role?, :valid_roles?, :has_roles?, :has_role?, :has?, :is?, :roles, :roles_list, :admin?].each do |api_method|
|
42
|
+
# @admin_user.respond_to?(api_method).should be_true
|
43
|
+
# end
|
44
|
+
#
|
45
|
+
# # class method API
|
46
|
+
# [:valid_role?, :valid_roles?, :valid_roles].each do |class_api_method|
|
47
|
+
# @admin_user.class.respond_to?(class_api_method).should be_true
|
48
|
+
# end
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# describe '#valid_role?' do
|
52
|
+
# it "should be true that the admin user has a valid role of :guest" do
|
53
|
+
# # @admin_user.valid_role?(:guest).should be_true
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# it "should be true that the User class has a valid role of :guest" do
|
57
|
+
# # User.valid_role?(:guest).should be_true
|
58
|
+
# end
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# describe '#valid_roles' do
|
62
|
+
# it "should be true that the admin user has a valid role of :guest" do
|
63
|
+
# # @admin_user.valid_roles.should include(:guest, :admin)
|
64
|
+
# end
|
65
|
+
#
|
66
|
+
# it "should be true that the User class has a valid role of :guest" do
|
67
|
+
# User.valid_roles.should include(:guest, :admin)
|
68
|
+
# end
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# describe '#valid_roles?' do
|
72
|
+
# it "should be true that the admin user has a valid role of :guest" do
|
73
|
+
# @admin_user.valid_roles?(:guest, :admin).should be_true
|
74
|
+
# end
|
75
|
+
#
|
76
|
+
# it "should be true that the User class has a valid role of :guest" do
|
77
|
+
# User.valid_roles?(:guest, :admin).should be_true
|
78
|
+
# end
|
79
|
+
# end
|
80
|
+
#
|
81
|
+
# describe '#has_role?' do
|
82
|
+
# it "should have admin user role to :admin and not to :user" do
|
83
|
+
# @admin_user.has_role?(:user).should be_false
|
84
|
+
# @admin_user.has_role?(:admin).should be_true
|
85
|
+
# end
|
86
|
+
#
|
87
|
+
# it "should be true that guest user has role :guest and not :admin" do
|
88
|
+
# puts "Guest user: #{@guest_user.roles_list}"
|
89
|
+
# @guest_user.has_role?(:guest).should be_true
|
90
|
+
# @guest_user.has_role?(:admin).should be_false
|
91
|
+
# end
|
92
|
+
# end
|
93
|
+
#
|
94
|
+
# describe '#has?' do
|
95
|
+
# it "should be true that the admin_user has the :admin role" do
|
96
|
+
# @admin_user.has?(:admin).should be_true
|
97
|
+
# end
|
98
|
+
#
|
99
|
+
# it "should NOT be true that the admin_user has the :admin role" do
|
100
|
+
# @guest_user.has?(:admin).should be_false
|
101
|
+
# end
|
102
|
+
# end
|
103
|
+
#
|
104
|
+
# describe '#has_roles?' do
|
105
|
+
# it "should be true that the admin_user has the roles :admin" do
|
106
|
+
# # @admin_user.has_roles?(:admin).should be_true
|
107
|
+
# end
|
108
|
+
#
|
109
|
+
# it "should NOT be true that the user has the roles :admin" do
|
110
|
+
# @guest_user.has_roles?(:admin).should be_false
|
111
|
+
# end
|
112
|
+
# end
|
113
|
+
#
|
114
|
+
# describe '#roles_list' do
|
115
|
+
# it "should be true that the first role of admin_user is the :admin role" do
|
116
|
+
# @admin_user.roles_list.should include(:admin)
|
117
|
+
# end
|
118
|
+
#
|
119
|
+
# it "should be true that the first role of admin_user is the :user role" do
|
120
|
+
# case @normal_user.class.role_strategy.multiplicity
|
121
|
+
# when :single
|
122
|
+
# #if @normal_user.class.role_strategy.name == :admin_flag
|
123
|
+
# @normal_user.roles_list.should include(:guest)
|
124
|
+
# # else
|
125
|
+
# # @normal_user.roles_list.should include(:user)
|
126
|
+
# #end
|
127
|
+
# when :multi
|
128
|
+
# puts "Norm: #{@normal_user.roles}"
|
129
|
+
# @normal_user.roles_list.should include(:user, :guest)
|
130
|
+
# end
|
131
|
+
# end
|
132
|
+
# end
|
133
|
+
#
|
134
|
+
# describe '#roles' do
|
135
|
+
# it "should be true that the roles of admin_user is an array with the role :admin" do
|
136
|
+
# roles = @admin_user.roles
|
137
|
+
# if defined?(Role) && roles.kind_of?(Role)
|
138
|
+
# roles.name.to_sym.should == :admin
|
139
|
+
# elsif roles.kind_of? Array
|
140
|
+
# if @normal_user.class.role_strategy.type == :complex
|
141
|
+
# roles.first.name.to_sym.should == :admin
|
142
|
+
# end
|
143
|
+
# if @normal_user.class.role_strategy.name == :admin_flag
|
144
|
+
# roles.first.should == true
|
145
|
+
# end
|
146
|
+
# else
|
147
|
+
# roles.to_sym.should == :admin
|
148
|
+
# end
|
149
|
+
# end
|
150
|
+
# end
|
151
|
+
#
|
152
|
+
# describe '#admin?' do
|
153
|
+
# it "should be true that admin_user is in the :admin role" do
|
154
|
+
# @admin_user.admin?.should be_true
|
155
|
+
# end
|
156
|
+
#
|
157
|
+
# it "should NOT be true that the user is in the :admin role" do
|
158
|
+
# @guest_user.admin?.should be_false
|
159
|
+
# end
|
160
|
+
# end
|
161
|
+
#
|
162
|
+
# describe '#is?' do
|
163
|
+
# it "should be true that admin_user is in the :admin role" do
|
164
|
+
# @admin_user.is?(:admin).should be_true
|
165
|
+
# end
|
166
|
+
#
|
167
|
+
# it "should NOT be true that the user is in the :admin role" do
|
168
|
+
# @guest_user.is?(:admin).should be_false
|
169
|
+
# end
|
170
|
+
# end
|
171
|
+
#
|
172
|
+
# describe '#roles=' do
|
173
|
+
# it "should set user role to :admin" do
|
174
|
+
# @guest_user.roles = :admin
|
175
|
+
# @guest_user.has_role?(:admin).should be_true
|
176
|
+
# @guest_user.roles = :guest
|
177
|
+
# end
|
178
|
+
# end
|
179
|
+
#
|
180
|
+
# describe '#exchange_roles' do
|
181
|
+
# it "should exchange user role :user with role :admin" do
|
182
|
+
# @guest_user.exchange_role :guest, :with => :admin
|
183
|
+
# @guest_user.has?(:guest).should be_false
|
184
|
+
# @guest_user.has?(:admin).should be_true
|
185
|
+
# end
|
186
|
+
#
|
187
|
+
# it "should exchange user role :admin with roles :user and :guest" do
|
188
|
+
# case @admin_user.class.role_strategy.multiplicity
|
189
|
+
# when :single
|
190
|
+
# lambda { @admin_user.exchange_role :admin, :with => [:user, :guest] }.should raise_error(ArgumentError)
|
191
|
+
# when :multi
|
192
|
+
# @admin_user.exchange_role :admin, :with => [:user, :guest]
|
193
|
+
# @admin_user.has_role?(:user).should be_true
|
194
|
+
# @admin_user.has_role?(:guest).should be_true
|
195
|
+
# @admin_user.has?(:admin).should be_false
|
196
|
+
# end
|
197
|
+
# end
|
198
|
+
# end
|
199
|
+
#
|
200
|
+
# describe '#remove_roles' do
|
201
|
+
# it "should remove user role :admin using #remove_roles" do
|
202
|
+
# @admin_user.remove_roles :admin
|
203
|
+
# @admin_user.has_role?(:admin).should_not be_true
|
204
|
+
# end
|
205
|
+
#
|
206
|
+
# it "should remove user role :admin using #remove_role" do
|
207
|
+
# @guest_user.add_role :admin
|
208
|
+
# @guest_user.has_role?(:admin).should be_true
|
209
|
+
# @guest_user.remove_role :admin
|
210
|
+
# @guest_user.has_role?(:admin).should_not be_true
|
211
|
+
# end
|
212
|
+
# end
|
213
213
|
end
|
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
use_roles_strategy :roles_mask
|
3
2
|
|
4
|
-
class User < ActiveRecord::Base
|
3
|
+
class User < ActiveRecord::Base
|
5
4
|
include Roles::ActiveRecord
|
6
5
|
|
7
6
|
strategy :roles_mask, :default
|
8
|
-
valid_roles_are :admin, :guest, :user
|
7
|
+
valid_roles_are :admin, :guest, :user
|
9
8
|
end
|
10
9
|
|
11
10
|
def api_migrate
|
@@ -1,20 +1,15 @@
|
|
1
1
|
def default_user_setup
|
2
2
|
@guest_user = User.create(:name => 'Guest user')
|
3
3
|
@guest_user.add_roles :guest
|
4
|
-
# @guest_user.roles = :guest
|
5
4
|
@guest_user.save
|
6
5
|
|
7
|
-
puts "Guest roles: #{@guest_user.roles_list}"
|
8
|
-
|
9
6
|
@normal_user = User.create(:name => 'Normal user')
|
10
7
|
@normal_user.roles = :guest, :user
|
11
8
|
@normal_user.save
|
12
9
|
|
13
|
-
puts "Normal roles: #{@normal_user.roles_list}, #{@normal_user.inspect}"
|
14
|
-
|
15
10
|
@admin_user = User.create(:name => 'Admin user')
|
16
11
|
@admin_user.roles = :admin
|
17
12
|
@admin_user.save
|
18
13
|
|
19
|
-
puts "Admin roles: #{@admin_user.roles_list}, #{@admin_user.inspect}"
|
14
|
+
puts "Admin roles: #{@admin_user.roles_list}, #{@admin_user.inspect}"
|
20
15
|
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 0.4.
|
8
|
+
- 1
|
9
|
+
version: 0.4.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Kristian Mandrup
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-26 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -376,17 +376,6 @@ files:
|
|
376
376
|
- lib/views/_multi_role_selector.erb.html
|
377
377
|
- lib/views/_single_role_selector.erb.html
|
378
378
|
- roles_active_record.gemspec
|
379
|
-
- sandbox/Rakefile
|
380
|
-
- sandbox/add_role_to_users_migration.erb
|
381
|
-
- sandbox/create_roles_migration.erb
|
382
|
-
- sandbox/create_user_roles_migration.erb
|
383
|
-
- sandbox/database.log
|
384
|
-
- sandbox/database.yml
|
385
|
-
- sandbox/development.sqlite3
|
386
|
-
- sandbox/migrate/201002508_create_roles.rb
|
387
|
-
- sandbox/migrate/20102507_create_users.rb
|
388
|
-
- sandbox/model_base.rb
|
389
|
-
- sandbox/test.rb
|
390
379
|
- spec/db/database.yml
|
391
380
|
- spec/fixtures/many_roles_setup.rb
|
392
381
|
- spec/fixtures/many_roles_setup_unique_check.rb
|
data/sandbox/Rakefile
DELETED
@@ -1,16 +0,0 @@
|
|
1
|
-
require 'active_record'
|
2
|
-
require 'yaml'
|
3
|
-
require 'logger'
|
4
|
-
|
5
|
-
task :default => :migrate
|
6
|
-
|
7
|
-
desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x"
|
8
|
-
task :migrate => :environment do
|
9
|
-
folder = File.dirname(__FILE__) + '/migrate'
|
10
|
-
ActiveRecord::Migrator.migrate(folder, ENV["VERSION"] ? ENV["VERSION"].to_i : nil)
|
11
|
-
end
|
12
|
-
|
13
|
-
task :environment do
|
14
|
-
ActiveRecord::Base.establish_connection(YAML::load(File.open('database.yml')))
|
15
|
-
ActiveRecord::Base.logger = Logger.new(File.open('database.log', 'a'))
|
16
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
class CreateUserRoles < ActiveRecord::Migration
|
2
|
-
def self.up
|
3
|
-
create_table :<%= table_name.singularize %>_roles do |t|
|
4
|
-
t.integer :<%= table_name.singularize %>_id
|
5
|
-
t.integer :role_id
|
6
|
-
t.timestamps
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.down
|
11
|
-
drop_table :<%= table_name.singularize %>_roles
|
12
|
-
end
|
13
|
-
end
|
data/sandbox/database.log
DELETED
@@ -1,47 +0,0 @@
|
|
1
|
-
D, [2010-08-03T11:17:25.097372 #5468] DEBUG -- : [1m[36mSQL (0.3ms)[0m [1m SELECT name
|
2
|
-
FROM sqlite_master
|
3
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
4
|
-
[0m
|
5
|
-
D, [2010-08-03T11:17:25.097614 #5468] DEBUG -- : [1m[35mSQL (0.1ms)[0m select sqlite_version(*)
|
6
|
-
D, [2010-08-03T11:17:25.099557 #5468] DEBUG -- : [1m[36mSQL (1.7ms)[0m [1mCREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) [0m
|
7
|
-
D, [2010-08-03T11:17:25.099704 #5468] DEBUG -- : [1m[35mSQL (0.0ms)[0m PRAGMA index_list("schema_migrations")
|
8
|
-
D, [2010-08-03T11:17:25.101503 #5468] DEBUG -- : [1m[36mSQL (1.7ms)[0m [1mCREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")[0m
|
9
|
-
D, [2010-08-03T11:17:25.101691 #5468] DEBUG -- : [1m[35mSQL (0.1ms)[0m SELECT name
|
10
|
-
FROM sqlite_master
|
11
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
12
|
-
|
13
|
-
D, [2010-08-03T11:18:24.658917 #5733] DEBUG -- : [1m[36mSQL (0.8ms)[0m [1m SELECT name
|
14
|
-
FROM sqlite_master
|
15
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
16
|
-
[0m
|
17
|
-
D, [2010-08-03T11:19:32.203267 #5997] DEBUG -- : [1m[36mSQL (0.4ms)[0m [1m SELECT name
|
18
|
-
FROM sqlite_master
|
19
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
20
|
-
[0m
|
21
|
-
D, [2010-08-03T11:21:50.864071 #6613] DEBUG -- : [1m[36mSQL (0.4ms)[0m [1m SELECT name
|
22
|
-
FROM sqlite_master
|
23
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
24
|
-
[0m
|
25
|
-
D, [2010-08-03T11:21:50.866101 #6613] DEBUG -- : [1m[35mSQL (0.1ms)[0m SELECT name
|
26
|
-
FROM sqlite_master
|
27
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
28
|
-
|
29
|
-
D, [2010-08-03T11:21:50.867280 #6613] DEBUG -- : [1m[36mSQL (0.1ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations"[0m
|
30
|
-
I, [2010-08-03T11:21:50.867334 #6613] INFO -- : Migrating to CreateUsers (20102507)
|
31
|
-
D, [2010-08-03T11:21:50.867474 #6613] DEBUG -- : [1m[35mSQL (0.0ms)[0m select sqlite_version(*)
|
32
|
-
D, [2010-08-03T11:21:50.870727 #6613] DEBUG -- : [1m[36mSQL (0.5ms)[0m [1mCREATE TABLE "users" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL) [0m
|
33
|
-
D, [2010-08-03T11:21:50.900844 #6613] DEBUG -- : [1m[35mSQL (0.2ms)[0m INSERT INTO "schema_migrations" ("version") VALUES ('20102507')
|
34
|
-
D, [2010-08-03T14:16:49.368569 #54191] DEBUG -- : [1m[36mSQL (0.4ms)[0m [1m SELECT name
|
35
|
-
FROM sqlite_master
|
36
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
37
|
-
[0m
|
38
|
-
D, [2010-08-03T14:16:49.387225 #54191] DEBUG -- : [1m[35mSQL (0.2ms)[0m SELECT name
|
39
|
-
FROM sqlite_master
|
40
|
-
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
41
|
-
|
42
|
-
D, [2010-08-03T14:16:49.388472 #54191] DEBUG -- : [1m[36mSQL (0.1ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations"[0m
|
43
|
-
I, [2010-08-03T14:16:49.388536 #54191] INFO -- : Migrating to CreateUsers (20102507)
|
44
|
-
I, [2010-08-03T14:16:49.388570 #54191] INFO -- : Migrating to CreateRoles (201002508)
|
45
|
-
D, [2010-08-03T14:16:49.388708 #54191] DEBUG -- : [1m[35mSQL (0.1ms)[0m select sqlite_version(*)
|
46
|
-
D, [2010-08-03T14:16:49.406721 #54191] DEBUG -- : [1m[36mSQL (0.4ms)[0m [1mCREATE TABLE "roles" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255) NOT NULL) [0m
|
47
|
-
D, [2010-08-03T14:16:49.427264 #54191] DEBUG -- : [1m[35mSQL (13.7ms)[0m INSERT INTO "schema_migrations" ("version") VALUES ('201002508')
|
data/sandbox/database.yml
DELETED
data/sandbox/development.sqlite3
DELETED
Binary file
|
data/sandbox/model_base.rb
DELETED
@@ -1,46 +0,0 @@
|
|
1
|
-
require 'require_all'
|
2
|
-
require 'active_support/inflector'
|
3
|
-
require_all File.dirname(__FILE__) + '/strategies'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
module RoleModels::ActiveRecord
|
8
|
-
include RoleModels::Base
|
9
|
-
orm_name :active_record
|
10
|
-
end
|
11
|
-
|
12
|
-
|
13
|
-
module ActiveRecord
|
14
|
-
class Base
|
15
|
-
include RoleModels::ActiveRecord
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
|
-
class User
|
21
|
-
include RoleModels::Generic
|
22
|
-
|
23
|
-
attr_accessor :roles_mask
|
24
|
-
role_strategy :roles_mask
|
25
|
-
end
|
26
|
-
|
27
|
-
class User
|
28
|
-
include RoleModels::Generic::RolesMask
|
29
|
-
attr_accessor :roles_mask
|
30
|
-
end
|
31
|
-
|
32
|
-
class User < ActiveRecord::Base
|
33
|
-
role_strategy :roles_mask
|
34
|
-
end
|
35
|
-
|
36
|
-
class User
|
37
|
-
include MongoMapper::Document
|
38
|
-
|
39
|
-
role_strategy :roles_mask
|
40
|
-
end
|
41
|
-
|
42
|
-
class User
|
43
|
-
include Mongoid::Document
|
44
|
-
|
45
|
-
role_strategy :roles_mask
|
46
|
-
end
|
data/sandbox/test.rb
DELETED
@@ -1,13 +0,0 @@
|
|
1
|
-
require 'active_record'
|
2
|
-
require 'yaml'
|
3
|
-
require 'logger'
|
4
|
-
path = File.dirname(__FILE__) + '/database.yml'
|
5
|
-
dbfile = File.open(path)
|
6
|
-
dbconfig = YAML::load(dbfile)
|
7
|
-
ActiveRecord::Base.establish_connection(dbconfig)
|
8
|
-
ActiveRecord::Base.logger = Logger.new(STDERR)
|
9
|
-
|
10
|
-
class User < ActiveRecord::Base
|
11
|
-
end
|
12
|
-
|
13
|
-
puts User.count
|