Class: Capability

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/capability.rb

Overview

create_table :capabilities do |t|

t.string :description
t.references :capability_type
t.references :capability_resource, :polymorphic => true
t.integer :scope_type_id
t.text :scope_query
t.timestamps

end

add_index :capabilities, :capability_type_id add_index :capabilities, :scope_type_id add_index :capabilities, [:capability_resource_id, :capability_resource_type], :name => ‘capability_resource_index’

Instance Method Summary collapse

Instance Method Details

#groupsObject



74
75
76
# File 'app/models/capability.rb', line 74

def groups
  Group.joins(:capability_accessors).where(:capability_accessors => {:capability_id => self.id })
end

#groups_notObject



67
68
69
70
71
72
# File 'app/models/capability.rb', line 67

def groups_not
  Group.joins("LEFT JOIN capability_accessors ON capability_accessors.capability_id = #{self.id}
                      AND capability_accessors.capability_accessor_record_type = 'Group' 
                      AND capability_accessors.capability_accessor_record_id = groups.id").
    where("capability_accessors.id IS NULL")
end

#remove_all_rolesObject



48
49
50
# File 'app/models/capability.rb', line 48

def remove_all_roles
  capability_accessors.destroy_all
end

#rolesObject



52
53
54
# File 'app/models/capability.rb', line 52

def roles
  SecurityRole.joins(:capability_accessors).where(:capability_accessors => {:capability_id => self.id })
end

#roles_notObject



41
42
43
44
45
46
# File 'app/models/capability.rb', line 41

def roles_not
  SecurityRole.joins("LEFT JOIN capability_accessors ON capability_accessors.capability_id = #{self.id}
                      AND capability_accessors.capability_accessor_record_type = 'SecurityRole' 
                      AND capability_accessors.capability_accessor_record_id = security_roles.id").
    where("capability_accessors.id IS NULL")
end

#to_data_hashObject



78
79
80
# File 'app/models/capability.rb', line 78

def to_data_hash
  to_hash(only: [:id, :description])
end

#update_descriptionObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'app/models/capability.rb', line 26

def update_description
  if description.blank?
    desc = "#{capability_type.description} #{capability_resource_type}"
    case scope_type
    when ScopeType.find_by_internal_identifier('class')
      self.description = "#{desc}"
    when ScopeType.find_by_internal_identifier('instance')
      self.description = "#{desc} #{capability_resource.to_s} Instance"
    when ScopeType.find_by_internal_identifier('query')
      self.description = "#{desc} Scope"
    end
    self.save
  end
end

#usersObject



63
64
65
# File 'app/models/capability.rb', line 63

def users
  User.joins(:capability_accessors).where(:capability_accessors => {:capability_id => self.id })
end

#users_notObject



56
57
58
59
60
61
# File 'app/models/capability.rb', line 56

def users_not
  User.joins("LEFT JOIN capability_accessors ON capability_accessors.capability_id = #{self.id}
                      AND capability_accessors.capability_accessor_record_type = 'User' 
                      AND capability_accessors.capability_accessor_record_id = users.id").
    where("capability_accessors.id IS NULL")
end