Module: RoleAuthorization::Roles::Manager::InstanceMethods

Included in:
RoleAuthorization::Roles::Manager
Defined in:
lib/role_authorization/roles/manager.rb

Instance Method Summary collapse

Instance Method Details

#any(new_scope = nil) ⇒ Object



54
55
56
57
58
59
60
61
62
63
# File 'lib/role_authorization/roles/manager.rb', line 54

def any(new_scope = nil)
  case new_scope
  when nil
    [global_roles, object_roles.values].flatten
  when :global
    global_roles
  else
    object_roles[new_scope]
  end
end

#creation_rules(rules) ⇒ Object



40
41
42
43
44
# File 'lib/role_authorization/roles/manager.rb', line 40

def creation_rules(rules)
  rules.each_pair do |key, allowed_roles|
    @creations[key] = allowed_roles.flatten.uniq
  end
end

#group(groups) ⇒ Object



46
47
48
# File 'lib/role_authorization/roles/manager.rb', line 46

def group(groups)
  @group_definitions = groups
end

#nickname(nicknames) ⇒ Object



50
51
52
# File 'lib/role_authorization/roles/manager.rb', line 50

def nickname(nicknames)
  @nicknames = nicknames
end

#persist!Object

make sure our defined roles are in the database remove any roles taken out



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/role_authorization/roles/manager.rb', line 67

def persist!
  return if klass.nil?
  return unless klass.new.respond_to?(:nickname)

  persisted_roles = klass.all.inject({}) {|hash, record| hash[record.name.to_sym] = record; hash}

  [global_roles, object_roles.values].flatten.map do |role_name|
    if persisted_roles.delete(role_name).nil?
      klass.create(:name => role_name.to_s, :nickname => nicknames[role_name].to_s)
    end
  end

  # if we have persisted roles left we delete them
  persisted_roles.values.map(&:destroy)
end

#roles(*options) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/role_authorization/roles/manager.rb', line 32

def roles(*options)
  @global_roles, @object_roles = if options.last.is_a?(Hash)
                                   [options.pop, options].reverse
                                 else
                                   [options, {}]
                                 end
end

#setup(klass) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/role_authorization/roles/manager.rb', line 22

def setup(klass)
  @klass = klass
  klass.send(:include, RoleAuthorization::Roles::Role)

  # now that we know what class to use, create our role groups
  (@group_definitions || {}).each_pair do |group_name, roles|
    @groups[group_name.to_sym] = RoleAuthorization::Roles::RoleGroup.new(klass, roles)
  end
end