Module: AccessControl::UserExtension

Defined in:
lib/access_control/user_extension.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
# File 'lib/access_control/user_extension.rb', line 3

def self.included(klass)
  klass.class_eval do
      include AccessControl::CommonMethods
      include AccessControl::Language
    
      has_one :permission, :as => :authorizable, :dependent => :destroy						
      has_and_belongs_to_many :roles, :join_table => :user_roles

      alias_method :can?, :has_permission?

      accepts_nested_attributes_for :permission
    end
end

Instance Method Details

#does_not_play(role) ⇒ Object



36
37
38
39
40
41
# File 'lib/access_control/user_extension.rb', line 36

def does_not_play role
  role = role.to_s if role.is_a? Symbol
  actual_role = Role.find_by_name(role.downcase)
  raise "#{role} does not exist" if actual_role.nil?
  roles.delete actual_role
end

#does_not_play?(role) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/access_control/user_extension.rb', line 32

def does_not_play? role
  !plays? role
end

#has_any_permissions?Boolean

Returns:

  • (Boolean)


67
68
69
# File 'lib/access_control/user_extension.rb', line 67

def has_any_permissions?
  !self.permissions.empty?
end

#has_permission?(perm) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
46
47
48
49
# File 'lib/access_control/user_extension.rb', line 43

def has_permission? perm
  return true if has_local_permission? perm
  roles.each do |role|
    return true if role.has_local_permission? perm
  end
  false            
end

#permissionsObject



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/access_control/user_extension.rb', line 51

def permissions        
  set = self.permission.set_permissions unless self.permission.nil?
  set = [] if set.nil?
  set = [set] if set.is_a? String        

  role_permissions = []
  roles.each do |role|
    role_perms = role.permission.set_permissions
    role_permissions << role_perms if role_perms.is_a? String
    role_permissions = role_permissions + role_perms if role_perms.is_a? Array
  end

  total = set + role_permissions
  total.uniq
end

#plays(role) ⇒ Object



17
18
19
20
21
22
23
# File 'lib/access_control/user_extension.rb', line 17

def plays role
  role = role.to_s if role.is_a? Symbol
  r = Role.find_by_name role.downcase
  raise "#{role} does not exist." if r.nil?
  roles << r
  true
end

#plays?(role) ⇒ Boolean

Returns:

  • (Boolean)


25
26
27
28
29
30
# File 'lib/access_control/user_extension.rb', line 25

def plays? role
  role = role.to_s if role.is_a? Symbol
  actual_role = Role.find_by_name(role.downcase)
  raise "#{role} does not exist" if actual_role.nil?
  roles.include? actual_role
end

#roles_attributes=(attributes) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
# File 'lib/access_control/user_extension.rb', line 71

def roles_attributes=(attributes)        
  if attributes.size == 1
    self.roles.clear
  else
    keys = []
    attributes.each_key do |id|
      keys << id unless id.to_i.eql? 0
    end
    self.role_ids = keys    
  end
end