Friday, September 20, 2024 12:15:18 AM
> settings

Customize


Authenticate

> permission.rb
# 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
All opinions represented herein are my own
- © 2024 itsthedevman
- build 340fbb8