У меня довольно стандартная настройка User / Role (роли пользователя HABTM, пользователи роли HABTM).Я использую CanCanCan для авторизации, и ваша роль определяет, что вы можете делать с приложением.Эта часть работает нормально, но теперь я хочу, чтобы пользователи могли наследовать роли как часть подписки на разные членства.
Вот соответствующие модели:
class User < ApplicationRecord
has_and_belongs_to_many :roles
has_one :membership_subscription
has_one :membership, through: :membership_subscription
end
class Role < ApplicationRecord
has_and_belongs_to_many :users
end
class MembershipSubscription < ApplicationRecord
belongs_to :user
belongs_to :membership
end
class Membership < ApplicationRecord
has_many :membership_subscriptions
has_many :users, through: :membership_subscriptions
end
Я думал, что смогу просто добавить ассоциацию has_many: roles
в членство, а затем сказать, что пользователь has_many
ролей посредством их подписки на членство, а также текущей ассоциации HABTM, которая позволяет назначать роли напрямую.
Таким образом, вы можете напрямую назначать роли пользователям, как вы можете сейчас (так как некоторые роли являются аддитивными, ивообще не относится к подписке / типу членства), но также пользователи автоматически наследуют роли (и теряют их снова), когда их подписчики приходят и уходят.
Имеет ли это смысл?Я полагаю, что другим вариантом было бы использовать обратные вызовы в модели, чтобы иметь дело с созданием / удалением ассоциаций ролей, но это не выглядит так элегантно.
Любой совет, высоко ценится!