Rails - CanCanCan,Rolify,Define - 定义关联模型的能力

时间:2016-09-19 08:01:09

标签: ruby-on-rails ruby devise cancancan rolify

我正在使用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

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 }