Rails CanCan宝石重构能力等级

aBa*_*boy 11 ruby rubygems ruby-on-rails cancan ruby-on-rails-4

我的rails应用程序中有大约13个模型,我在所有这些模型上都使用了它.我的能力课程变得越来越大.我对不同的CRUD操作有不同的能力条件,这使得它很难管理.

有人可以指导我如何重构这个......?比如,使用模块或类来使我的能力课看起来很整洁.

dgi*_*rez 16

简单的场景:如果你可以在几个互斥的集合中分割权限,那么你应该从@ryanb,CanCan创建者那里检查这个提议,在那里他将这些能力分成几个不同的类,然后覆盖该current_ability方法.ApplicationController

如何在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
...
Run Code Online (Sandbox Code Playgroud)

等等其他文件.