# frozen_string_literal: true class Permission < ApplicationRecord # Do not change any previously set values unless you want to regenerate permissions ALL = { sudoer: 1, user_self_delete: 2, user_self_modify: 3, user_delete: 4, user_modify: 5, user_view: 6, trusted_view: 7, professional_view: 8, file_delete: 9, file_modify: 10, file_view: 11, post_delete: 12, post_modify: 13, post_view: 14, project_view: 15 }.freeze ########################################### # Attributes attribute :name, :string attribute :value, :integer attribute :created_at, :datetime attribute :updated_at, :datetime ########################################### # Validations validates :name, uniqueness: true ########################################### def self.calculate(*permission_names) ids = permission_names.map { |n| ALL[n] } query = select("bit_or(value)").where(id: ids).to_sql connection.exec_query(query).cast_values.first end def in?(permission_value) (permission_value & value) == value end end