我正在使用Devise进行身份验证& CanCanCan / Rolify for Authorization。
我想通过各种协会将每个模型的记录限制为创建它的用户。
即。 / sales / 1只能由拥有该销售的组织的用户查看。
User
has_many :organisations
Organisation
belongs_to :user
has_many :sales
Sale
belongs_to :organisation
has_many :payments
Payment
belongs_to :sale
将组织限制为属于它的用户是直截了当的:
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :admin
can :manage, :all
elsif user.has_role? :standard
can [:create, :read, :update, :destroy], Organisation, :user_id => user.id
end
end
end
如何为相关销售以及随后的相关付款实现相同的目标?
can [:manage], Sale, ?
can [:manage], Payment, ?
注意:Rails 5.0.0.1,Ruby 2.3.1
答案 0 :(得分:0)
您可以在payment.rb
中添加关联 belongs_to :sale
has_one :organisation, through: :sale
然后你可以添加ability.rb
can :manage, Sale, :organisation => { :user_id => user.id }
can :manage, Payment, :organisation => { :user_id => user.id }