我的rails应用程序中大约有13个模型,我在所有模型上都使用了功能。我的能力课已经变得越来越庞大。我对不同的CRUD Action 有不同的能力条件,这使得管理起来很困难。

有人可以指导我如何重构它吗?例如,使用模块或类使我的能力类看起来更整洁。

最佳答案

简单场景:如果可以将权限划分为几个互斥的集合,则应从Cancan创建者@ryanb处检查此建议,他在其中将能力划分为几个不同的类,然后覆盖current_ability中的ApplicationController方法

How you can break up large Ability class in CanCan - Gists

更为复杂的场景:如果您有几个不同的重叠权限集,则可以尝试以下方法:

# app/models/ability.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    self.merge Abilities::Everyone.new(user)

    if user
      self.merge Abilities::Admin.new(user) if user.admin?
      self.merge Abilities::Authenticated.new(user)
    else
      self.merge Abilities::Guest.new(user)
    end
  end
end

# app/models/abilities/admin.rb
module Abilities
  class Admin
    include CanCan::Ability

    def initialize(user)
      # define abilities here ...
    end
  end
end

# app/models/abilities/everyone.rb
...

对于其余文件,依此类推。

关于ruby-on-rails - Rails CanCan gem重构能力等级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22530865/

10-08 23:15