Сразу скажу что данный гем не использовал, но напишу как можно сделать иначе, вдруг пригодится...
Пример что ниже описывает как можно реализовать простую роль или роль к "компании"
Модель
Roleclass Role < ApplicationRecord
belongs_to :user
belongs_to :company, optional: true
validates :user, :name, presence: true
enum name: %i[admin manager]
end
И например отрывок из модели
Userhas_many :roles, dependent: :destroy
def create_role(role_name, company = nil)
roles.create(name: Role.names[role_name], company: company)
end
def role?(role_name, company = nil)
if company.present?
roles.where(name: Role.names[role_name], company: company).any?
else
roles.where(name: Role.names[role_name]).any?
end
end
def admin?
role? 'admin'
end
def manager?(company)
role? 'manager'
end
Дальше все просто
# Fake
user = User.first
company = Company.first
Создать роль администратора:
user.create_role :admin
Создать роль владельца компании:
user.create_role :manager, company
Проверить роль администратора:
user.admin?
Проверить роль к компании:
user.manager? company
А ограничить доступ "по ролям" можно простым гемом
pundit
Возможно где то опечатался, писал от руки