# SPDX-FileCopyrightText: 2020 IN COMMON Collective # # SPDX-License-Identifier: AGPL-3.0-or-later class Agency < ApplicationRecord include Bitfields belongs_to :agent belongs_to :user bitfield :roles, :observer, :editor, :maintainer, :leader class << self # Grant role in agent to user def grant(agent, user, role) r = find_or_create_by(agent: agent, user: user) r&.public_send("#{role}=", true) && r&.save end # Revoke role in agent from user def revoke(agent, user, role) r = find_by(agent: agent, user: user) r&.public_send("#{role}=", false) && r&.save end end # Grant role to current user in current agent def grant(role) self.class.grant(agent, user, role) end # Revoke role from current user in current agent def revoke(role) self.class.revoke(agent, user, role) end end