roles_active_record 0.2.5 → 0.3.1
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/Gemfile +13 -5
- data/Rakefile +13 -14
- data/VERSION +1 -1
- data/development.sqlite3 +0 -0
- data/lib/roles_active_record/role.rb +3 -0
- data/lib/roles_active_record/strategy/multi/many_roles.rb +38 -41
- data/lib/roles_active_record/strategy/multi/roles_mask.rb +22 -23
- data/lib/roles_active_record/strategy/multi.rb +54 -0
- data/lib/roles_active_record/strategy/shared.rb +26 -0
- data/lib/roles_active_record/strategy/single/admin_flag.rb +19 -18
- data/lib/roles_active_record/strategy/single/one_role.rb +35 -26
- data/lib/roles_active_record/strategy/single/role_string.rb +24 -19
- data/lib/roles_active_record/strategy/single.rb +34 -0
- data/roles_active_record.gemspec +54 -49
- data/spec/fixtures/many_roles_setup.rb +1 -1
- data/spec/fixtures/one_role_setup.rb +1 -1
- data/spec/migrations/many_roles/002_create_roles.rb +0 -1
- data/spec/migrations/roles_mask/005_add_roles_mask_to_users.rb +1 -1
- data/spec/roles_active_record/strategy/api.rb +214 -0
- data/spec/roles_active_record/strategy/api_examples.rb +213 -0
- data/spec/roles_active_record/strategy/multi/many_roles_spec.rb +27 -0
- data/spec/roles_active_record/strategy/multi/roles_mask_spec.rb +23 -0
- data/spec/roles_active_record/strategy/single/admin_flag_spec.rb +27 -0
- data/spec/roles_active_record/strategy/single/one_role_spec.rb +19 -0
- data/spec/roles_active_record/strategy/single/role_string_spec.rb +23 -0
- data/spec/roles_active_record/strategy/user_setup.rb +20 -0
- data/spec/spec_helper.rb +6 -1
- metadata +49 -63
- data/roles_for_ar.gemspec +0 -165
- data/spec/roles_active_record/admin_flag_spec.rb +0 -71
- data/spec/roles_active_record/many_roles_spec.rb +0 -69
- data/spec/roles_active_record/one_role_spec.rb +0 -68
- data/spec/roles_active_record/role_string_spec.rb +0 -68
- data/spec/roles_active_record/roles_mask_spec.rb +0 -68
data/Gemfile
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
source :rubygems
|
2
2
|
|
3
|
-
gem "active_record",
|
4
|
-
gem "active_support",
|
5
|
-
gem "meta_where",
|
3
|
+
gem "active_record", ">= 3.0.0"
|
4
|
+
gem "active_support", ">= 3.0.0"
|
5
|
+
gem "meta_where", ">= 0.9"
|
6
|
+
gem "arel", "~> 1.0"
|
7
|
+
gem "meta_where", ">= 0.9"
|
8
|
+
gem "sugar-high", "~> 0.3.0"
|
9
|
+
gem "require_all", '~> 1.2.0'
|
10
|
+
gem "roles_generic", '~> 0.2.5'
|
11
|
+
|
12
|
+
gem 'rails3_artifactor', '~> 0.3.0'
|
13
|
+
gem 'logging_assist', '~> 0.1.5'
|
6
14
|
|
7
15
|
group :test do
|
8
|
-
gem "rspec",
|
16
|
+
gem "rspec", ">= 2.0.0"
|
9
17
|
gem "yaml"
|
10
18
|
gem "logger"
|
11
19
|
gem 'database_cleaner'
|
12
|
-
gem "generator_spec",
|
20
|
+
gem "generator_spec", '>= 0.7.0'
|
13
21
|
end
|
data/Rakefile
CHANGED
@@ -7,21 +7,20 @@ begin
|
|
7
7
|
gem.email = "kmandrup@gmail.com"
|
8
8
|
gem.homepage = "http://github.com/kristianmandrup/roles_for_dm"
|
9
9
|
gem.authors = ["Kristian Mandrup"]
|
10
|
-
gem.add_development_dependency "rspec", '>= 2.0
|
11
|
-
gem.add_development_dependency 'database_cleaner', '
|
12
|
-
gem.add_development_dependency "generator-spec", '
|
13
|
-
|
14
|
-
gem.add_dependency "activerecord", "~> 3.0.0"
|
15
|
-
gem.add_dependency "activesupport", "~> 3.0.0"
|
16
|
-
gem.add_dependency "arel", "~> 1.0.0"
|
17
|
-
gem.add_dependency "meta_where", "~> 0.9.3"
|
18
|
-
gem.add_dependency "sugar-high", "~> 0.2.11"
|
19
|
-
gem.add_dependency "require_all", '~> 1.2.0'
|
20
|
-
gem.add_dependency "roles_generic", '~> 0.2.5'
|
21
|
-
gem.add_dependency 'rails3_artifactor', '>= 0.2.6'
|
22
|
-
gem.add_dependency 'logging_assist', '>= 0.1.5'
|
23
|
-
gem.add_dependency 'migration_assist', '>= 0.1.5'
|
10
|
+
gem.add_development_dependency "rspec", '>= 2.0'
|
11
|
+
gem.add_development_dependency 'database_cleaner', '>= 0.5'
|
12
|
+
gem.add_development_dependency "generator-spec", '>= 0.7.0'
|
24
13
|
|
14
|
+
gem.add_dependency "activerecord", "~> 3.0"
|
15
|
+
gem.add_dependency "activesupport", "~> 3.0"
|
16
|
+
gem.add_dependency "arel", "~> 1.0"
|
17
|
+
gem.add_dependency "meta_where", ">= 0.9"
|
18
|
+
gem.add_dependency "sugar-high", "~> 0.3.0"
|
19
|
+
gem.add_dependency "require_all", '~> 1.2.0'
|
20
|
+
gem.add_dependency "roles_generic", '>= 0.3.0'
|
21
|
+
|
22
|
+
gem.add_dependency 'rails3_artifactor', '~> 0.3.1'
|
23
|
+
gem.add_dependency 'logging_assist', '~> 0.1.6'
|
25
24
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
26
25
|
end
|
27
26
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.1
|
data/development.sqlite3
CHANGED
Binary file
|
@@ -2,9 +2,12 @@ module Roles::Base
|
|
2
2
|
def valid_roles_are(*role_list)
|
3
3
|
strategy_class.valid_roles = role_list.to_symbols
|
4
4
|
if role_class_name
|
5
|
+
"Create Roles: #{role_list}"
|
5
6
|
role_list.each do |name|
|
6
7
|
role_class_name.create(:name => name.to_s)
|
7
8
|
end
|
9
|
+
else
|
10
|
+
"Using Inline roles"
|
8
11
|
end
|
9
12
|
end
|
10
13
|
end
|
@@ -1,13 +1,15 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require 'roles_active_record/strategy/multi'
|
2
|
+
|
3
|
+
class Role < ActiveRecord::Base
|
4
|
+
scope :named, lambda{|role_names| where(:name.in => role_names.flatten)}
|
3
5
|
has_many :users, :through => :user_roles
|
4
|
-
has_many :user_roles
|
5
|
-
end
|
6
|
+
has_many :user_roles
|
7
|
+
end
|
6
8
|
|
7
|
-
class UserRole < ActiveRecord::Base
|
9
|
+
class UserRole < ActiveRecord::Base
|
8
10
|
belongs_to :user
|
9
11
|
belongs_to :role
|
10
|
-
end
|
12
|
+
end
|
11
13
|
|
12
14
|
module RoleStrategy::ActiveRecord
|
13
15
|
module ManyRoles
|
@@ -17,58 +19,53 @@ module RoleStrategy::ActiveRecord
|
|
17
19
|
|
18
20
|
def self.included base
|
19
21
|
base.extend Roles::Generic::Role::ClassMethods
|
20
|
-
base.extend ClassMethods
|
22
|
+
base.extend ClassMethods
|
21
23
|
base.has_many :many_roles, :through => :user_roles, :source => :role
|
22
|
-
base.has_many :user_roles
|
24
|
+
base.has_many :user_roles
|
23
25
|
end
|
24
26
|
|
25
|
-
module ClassMethods
|
26
|
-
def in_role(role_name)
|
27
|
-
|
27
|
+
module ClassMethods
|
28
|
+
def in_role(role_name)
|
29
|
+
in_any_role(role_name)
|
28
30
|
end
|
29
31
|
|
30
|
-
def
|
31
|
-
joins(:many_roles) & Role.named(role_names)
|
32
|
+
def in_any_role(*role_names)
|
33
|
+
joins(:many_roles) & Role.named(role_names.to_strings)
|
32
34
|
end
|
33
35
|
end
|
34
|
-
|
36
|
+
|
35
37
|
module Implementation
|
36
|
-
|
37
|
-
strategy_class.roles_attribute_name
|
38
|
-
end
|
39
|
-
|
40
|
-
# assign roles
|
41
|
-
def roles=(*_roles)
|
42
|
-
_roles = get_roles(_roles)
|
43
|
-
return nil if _roles.none?
|
38
|
+
include Roles::ActiveRecord::Strategy::Multi
|
44
39
|
|
45
|
-
|
46
|
-
|
47
|
-
|
40
|
+
# assign multiple roles
|
41
|
+
def roles=(*role_names)
|
42
|
+
puts "Assign roles #{role_names}"
|
43
|
+
role_names = role_names.flat_uniq
|
44
|
+
role_names = extract_roles(role_names)
|
45
|
+
return nil if role_names.empty?
|
46
|
+
puts "role names #{role_names}"
|
47
|
+
valids = role_class.find_roles(role_names).to_a
|
48
|
+
puts "valids: #{valids}"
|
49
|
+
vrs = select_valid_roles role_names
|
50
|
+
puts "Set valid roles #{vrs}"
|
51
|
+
set_roles(vrs)
|
48
52
|
end
|
49
53
|
|
50
|
-
def add_roles(*_roles)
|
51
|
-
_roles = get_roles(_roles)
|
52
|
-
return nil if _roles.none?
|
53
54
|
|
54
|
-
|
55
|
-
|
56
|
-
self.send(role_attribute) << role_relations
|
57
|
-
save
|
55
|
+
def new_roles *role_names
|
56
|
+
role_class.find_roles(extract_roles role_names)
|
58
57
|
end
|
59
58
|
|
60
|
-
|
61
|
-
|
62
|
-
self.send(role_attribute)
|
59
|
+
def present_roles roles_names
|
60
|
+
roles_names.to_a.map{|role| role.name.to_s.to_sym}
|
63
61
|
end
|
64
62
|
|
65
|
-
def
|
66
|
-
|
63
|
+
def set_empty_roles
|
64
|
+
self.send("#{role_attribute}=", [])
|
67
65
|
end
|
68
|
-
end
|
69
|
-
|
66
|
+
end
|
67
|
+
|
70
68
|
extend Roles::Generic::User::Configuration
|
71
|
-
configure :type => :role_class
|
69
|
+
configure :type => :role_class
|
72
70
|
end
|
73
71
|
end
|
74
|
-
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'roles_active_record/strategy/multi'
|
2
|
+
|
1
3
|
module RoleStrategy::ActiveRecord
|
2
4
|
module RolesMask
|
3
5
|
def self.default_role_attribute
|
@@ -20,7 +22,7 @@ module RoleStrategy::ActiveRecord
|
|
20
22
|
end
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
25
|
+
def in_any_role(*roles)
|
24
26
|
all.select do |user|
|
25
27
|
roles.flatten.any? do |role|
|
26
28
|
mask = calc_index(role.to_s)
|
@@ -34,7 +36,9 @@ module RoleStrategy::ActiveRecord
|
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
|
-
module Implementation
|
39
|
+
module Implementation
|
40
|
+
include Roles::ActiveRecord::Strategy::Multi
|
41
|
+
|
38
42
|
class Roles < ::Set # :nodoc:
|
39
43
|
attr_reader :model_instance
|
40
44
|
|
@@ -49,32 +53,27 @@ module RoleStrategy::ActiveRecord
|
|
49
53
|
end
|
50
54
|
end
|
51
55
|
|
52
|
-
|
53
|
-
|
54
|
-
|
56
|
+
protected
|
57
|
+
|
58
|
+
def calc_index(r)
|
59
|
+
2**strategy_class.valid_roles.index(r)
|
60
|
+
end
|
55
61
|
|
56
|
-
|
57
|
-
|
58
|
-
the_roles = (roles.flatten.map { |r| r.to_sym } & strategy_class.valid_roles)
|
59
|
-
value = the_roles.map{ |r| calc_index(r) }.inject{ |sum, bitvalue| sum + bitvalue }
|
60
|
-
puts "value: #{value}"
|
61
|
-
self.send "#{role_attribute}=", value
|
62
|
+
def get_roles
|
63
|
+
strategy_class::Roles.new(self, strategy_class.valid_roles.reject { |r| ((get_role || 0) & calc_index(r)).zero? })
|
62
64
|
end
|
63
|
-
alias_method :role=, :roles=
|
64
65
|
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
def new_roles *role_names
|
67
|
+
role_names = role_names.flatten.map{ |r| r.to_sym } & strategy_class.valid_roles
|
68
|
+
role_names.map { |r| calc_index(r) }.inject { |sum, bitvalue| sum + bitvalue }
|
68
69
|
end
|
69
70
|
|
70
|
-
def
|
71
|
-
|
72
|
-
end
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
def calc_index(r)
|
77
|
-
2**strategy_class.valid_roles.index(r)
|
71
|
+
def set_empty_roles
|
72
|
+
self.send("#{role_attribute}=", 0)
|
73
|
+
end
|
74
|
+
|
75
|
+
def present_roles *role_names
|
76
|
+
role_names.to_a.to_symbols
|
78
77
|
end
|
79
78
|
end
|
80
79
|
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'roles_active_record/strategy/shared'
|
2
|
+
|
3
|
+
module Roles::ActiveRecord
|
4
|
+
module Strategy
|
5
|
+
module Multi
|
6
|
+
# assign multiple roles
|
7
|
+
def roles=(*role_names)
|
8
|
+
extracted_roles = extract_roles(role_names)
|
9
|
+
return nil if extracted_roles.empty?
|
10
|
+
set_roles(select_valid_roles extracted_roles)
|
11
|
+
end
|
12
|
+
|
13
|
+
def add_roles *roles
|
14
|
+
new_roles = select_valid_roles(roles)
|
15
|
+
if !new_roles.empty?
|
16
|
+
self.roles = self.roles + new_roles
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# should remove the current single role (set = nil)
|
21
|
+
# only if it is contained in the list of roles to be removed
|
22
|
+
def remove_roles *role_names
|
23
|
+
role_names = role_names.flat_uniq
|
24
|
+
set_empty_roles and return if roles_diff(role_names).empty?
|
25
|
+
roles_to_remove = select_valid_roles(role_names)
|
26
|
+
set_roles roles_diff(role_names)
|
27
|
+
true
|
28
|
+
end
|
29
|
+
|
30
|
+
# query assigned roles
|
31
|
+
def roles
|
32
|
+
get_roles.map do |role|
|
33
|
+
role.respond_to?(:sym) ? role.to_sym : role
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def roles_list
|
38
|
+
my_roles = [roles].flat_uniq
|
39
|
+
return [] if my_roles.empty?
|
40
|
+
has_role_class? ? my_roles.map{|r| r.name.to_sym } : my_roles
|
41
|
+
end
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def set_roles *roles
|
46
|
+
self.send("#{role_attribute}=", new_roles(roles))
|
47
|
+
end
|
48
|
+
|
49
|
+
def get_roles
|
50
|
+
self.send(role_attribute)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Roles::ActiveRecord
|
2
|
+
module Strategy
|
3
|
+
module Shared
|
4
|
+
def set_role role
|
5
|
+
vr = new_role(role)
|
6
|
+
# self.send("#{role_attribute}=", vr)
|
7
|
+
update_attributes(role_attribute => vr)
|
8
|
+
end
|
9
|
+
alias_method :set_roles, :set_role
|
10
|
+
|
11
|
+
def get_role
|
12
|
+
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
|
+
end
|
19
|
+
|
20
|
+
def select_valid_roles *roles
|
21
|
+
roles.flat_uniq.select{|role| valid_role? role }
|
22
|
+
has_role_class? ? role_class.find_roles(roles).to_a.flat_uniq : roles.flat_uniq
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'roles_active_record/strategy/single'
|
2
|
+
|
1
3
|
module RoleStrategy::ActiveRecord
|
2
4
|
module AdminFlag
|
3
5
|
def self.default_role_attribute
|
@@ -24,26 +26,25 @@ module RoleStrategy::ActiveRecord
|
|
24
26
|
end
|
25
27
|
|
26
28
|
module Implementation
|
27
|
-
|
28
|
-
strategy_class.roles_attribute_name
|
29
|
-
end
|
30
|
-
|
31
|
-
# assign roles
|
32
|
-
def roles=(*new_roles)
|
33
|
-
first_role = new_roles.flatten.first
|
34
|
-
if valid_role?(first_role)
|
35
|
-
self.send("#{role_attribute}=", new_roles.flatten.first.admin?)
|
36
|
-
else
|
37
|
-
raise ArgumentError, "The role #{first_role} is not a valid role"
|
38
|
-
end
|
39
|
-
end
|
29
|
+
include Roles::ActiveRecord::Strategy::Single
|
40
30
|
|
41
|
-
|
42
|
-
|
43
|
-
role
|
44
|
-
[role]
|
31
|
+
def new_role role
|
32
|
+
role = role.kind_of?(Array) ? role.flatten.first : role
|
33
|
+
role.admin?
|
45
34
|
end
|
46
|
-
|
35
|
+
|
36
|
+
def get_role
|
37
|
+
self.send(role_attribute) ? strategy_class.admin_role_key : strategy_class.default_role_key
|
38
|
+
end
|
39
|
+
|
40
|
+
def present_roles *roles
|
41
|
+
roles = roles.flat_uniq
|
42
|
+
roles.map{|role| role ? :admin : :guest}
|
43
|
+
end
|
44
|
+
|
45
|
+
def set_empty_role
|
46
|
+
self.send("#{role_attribute}=", false)
|
47
|
+
end
|
47
48
|
|
48
49
|
end # Implementation
|
49
50
|
|
@@ -1,7 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require 'roles_active_record/strategy/single'
|
2
|
+
|
3
|
+
class Role < ActiveRecord::Base
|
4
|
+
scope :named, lambda{|role_names| where(:name.in => role_names.flatten)}
|
5
|
+
has_many :users
|
6
|
+
end
|
5
7
|
|
6
8
|
module RoleStrategy::ActiveRecord
|
7
9
|
module OneRole
|
@@ -11,40 +13,47 @@ module RoleStrategy::ActiveRecord
|
|
11
13
|
|
12
14
|
def self.included base
|
13
15
|
base.extend Roles::Generic::Role::ClassMethods
|
14
|
-
base.extend ClassMethods
|
15
|
-
base.
|
16
|
+
base.extend ClassMethods
|
17
|
+
base.belongs_to :one_role, :foreign_key => :role_id, :class_name => 'Role'
|
16
18
|
end
|
17
19
|
|
18
|
-
module ClassMethods
|
19
|
-
def in_role(role_name)
|
20
|
-
|
20
|
+
module ClassMethods
|
21
|
+
def in_role(role_name)
|
22
|
+
in_any_role(role_name)
|
21
23
|
end
|
22
24
|
|
23
|
-
def
|
25
|
+
def in_any_role(*role_names)
|
24
26
|
joins(:one_role) & Role.named(role_names)
|
25
27
|
end
|
26
28
|
end
|
27
29
|
|
28
|
-
module Implementation
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
30
|
+
module Implementation
|
31
|
+
include Roles::ActiveRecord::Strategy::Single
|
32
|
+
|
33
|
+
def new_role role
|
34
|
+
role_class.find_role(extract_role role)
|
35
|
+
end
|
36
|
+
|
37
|
+
def new_roles *roles
|
38
|
+
new_role roles.flatten.first
|
39
|
+
end
|
40
|
+
|
41
|
+
def remove_roles *role_names
|
42
|
+
roles = role_names.flat_uniq
|
43
|
+
set_empty_role if roles_diff(roles).empty?
|
44
|
+
true
|
45
|
+
end
|
33
46
|
|
34
|
-
|
35
|
-
|
47
|
+
def present_roles *roles
|
48
|
+
roles.map{|role| extract_role role}
|
36
49
|
end
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
def roles
|
41
|
-
[self.send(role_attribute).name.to_sym]
|
50
|
+
|
51
|
+
def set_empty_role
|
52
|
+
self.send("#{role_attribute}=", nil)
|
42
53
|
end
|
43
|
-
alias_method :roles_list, :roles
|
44
|
-
|
45
54
|
end
|
46
55
|
|
47
56
|
extend Roles::Generic::User::Configuration
|
48
|
-
configure :num => :single, :type => :role_class
|
49
|
-
end
|
57
|
+
configure :num => :single, :type => :role_class
|
58
|
+
end
|
50
59
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'roles_active_record/strategy/single'
|
2
|
+
|
1
3
|
module RoleStrategy::ActiveRecord
|
2
4
|
module RoleString
|
3
5
|
def self.default_role_attribute
|
@@ -15,32 +17,35 @@ module RoleStrategy::ActiveRecord
|
|
15
17
|
|
16
18
|
def in_role(role_name)
|
17
19
|
where(role_attribute => role_name)
|
18
|
-
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def in_any_role(*role_names)
|
23
|
+
where(:role_attribute.in => role_names)
|
24
|
+
end
|
19
25
|
end
|
20
|
-
|
21
26
|
|
22
27
|
module Implementation
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
include Roles::ActiveRecord::Strategy::Single
|
29
|
+
|
30
|
+
def new_role role
|
31
|
+
role = role.kind_of?(Array) ? role.first : role
|
32
|
+
role.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def new_roles *roles
|
36
|
+
new_role roles.flatten.first
|
37
|
+
end
|
31
38
|
|
32
|
-
def role
|
33
|
-
if
|
34
|
-
|
35
|
-
end
|
39
|
+
def present_role role
|
40
|
+
return role if role.kind_of? Array
|
41
|
+
role.split(',').map(&:to_sym)
|
36
42
|
end
|
37
43
|
|
38
|
-
|
39
|
-
|
40
|
-
role = self.send(role_attribute)
|
41
|
-
[role.to_sym]
|
44
|
+
def set_empty_role
|
45
|
+
self.send("#{role_attribute}=", "")
|
42
46
|
end
|
43
|
-
|
47
|
+
|
48
|
+
alias_method :present_roles, :present_role
|
44
49
|
end
|
45
50
|
|
46
51
|
extend Roles::Generic::User::Configuration
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'roles_active_record/strategy/shared'
|
2
|
+
|
3
|
+
class Symbol
|
4
|
+
def admin?
|
5
|
+
self == :admin
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module Roles::ActiveRecord
|
10
|
+
module Strategy
|
11
|
+
module Single
|
12
|
+
include Shared
|
13
|
+
# assigns first valid role from list of roles
|
14
|
+
def add_roles *role_names
|
15
|
+
new_roles = select_valid_roles(role_names)
|
16
|
+
new_role = new_roles.first if !new_roles.empty?
|
17
|
+
set_role new_role
|
18
|
+
end
|
19
|
+
|
20
|
+
# should remove the current single role (set = nil)
|
21
|
+
# only if it is contained in the list of roles to be removed
|
22
|
+
def remove_roles *role_names
|
23
|
+
roles = role_names.flat_uniq
|
24
|
+
set_empty_role if roles_diff(roles).empty?
|
25
|
+
true
|
26
|
+
end
|
27
|
+
|
28
|
+
def roles_list
|
29
|
+
raise 'the method #roles should be present' if !respond_to? :roles
|
30
|
+
present_roles(roles)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|