class Role < ActiveRecord::Base has_many :role_assignments, :dependent => :destroy belongs_to :environment serialize :permissions, Array validates_presence_of :name validates_uniqueness_of :name, :scope => :environment_id validates_uniqueness_of :key, :if => lambda { |role| !role.key.blank? }, :scope => :environment_id def initialize(*args) super(*args) end def key=(value) if self[:key] && system raise ArgumentError, 'Can\'t change key of system role' else self[:key] = value end end def permissions self[:permissions] ||= [] end def has_permission?(perm) permissions.include?(perm) end def has_kind?(k) perms[k] && permissions.any?{|p| perms[k].keys.include?(p)} end def kind env_perms = perms['Environment'].keys if permissions.any?{ |perm| env_perms.include?(perm) } 'Environment' else 'Profile' end end def name text = self[:name] self.class.included_modules.map(&:to_s).include?('GetText') ? gettext(text) : text end before_destroy :check_for_system_defined_role def check_for_system_defined_role ! self.system end protected def perms ActiveRecord::Base::PERMISSIONS end end